Browse Source

Allow StrokeDashArray in XAML.

Steven Kirk 10 years ago
parent
commit
b3cdd92398

+ 2 - 2
samples/XamlTestApplicationPcl/TreeViewItem.paml

@@ -16,12 +16,12 @@
                                 Content="{TemplateBinding Header}"
                                 Margin="{TemplateBinding Padding}"/>
             </Border>
-            <!--<Rectangle Name="focus"
+            <Rectangle Name="focus"
                        IsVisible="{TemplateBinding IsFocused}"
                        Stroke="Black"
                        StrokeThickness="1"
                        StrokeDashArray="1,2"
-                       Grid.Column="1"/>-->
+                       Grid.Column="1"/>
           </Grid>
           <ItemsPresenter Name="PART_ItemsPresenter"
                           IsVisible="{TemplateBinding IsExpanded}"

+ 3 - 0
src/Markup/Perspex.Markup.Xaml/Context/PerspexWiringContext.cs

@@ -24,6 +24,8 @@ using Perspex.Platform;
 using Perspex.Styling;
 using Perspex.Controls.Primitives;
 using Perspex.Controls.Templates;
+using System.Collections;
+using Perspex.Collections;
 
 namespace Perspex.Markup.Xaml.Context
 {
@@ -99,6 +101,7 @@ namespace Perspex.Markup.Xaml.Context
                 new TypeConverterRegistration(typeof(Geometry), new GeometryTypeConverter()),
                 new TypeConverterRegistration(typeof(GridLength), new GridLengthTypeConverter()),
                 new TypeConverterRegistration(typeof(KeyGesture), new KeyGestureConverter()),
+                new TypeConverterRegistration(typeof(PerspexList<double>), new PerspexListTypeConverter<double>()),
                 new TypeConverterRegistration(typeof(IMemberSelector), new MemberSelectorTypeConverter()),
                 new TypeConverterRegistration(typeof(Point), new PointTypeConverter()),
                 new TypeConverterRegistration(typeof(PerspexProperty), new PerspexPropertyTypeConverter()),

+ 52 - 0
src/Markup/Perspex.Markup.Xaml/Converters/PerspexListTypeConverter.cs

@@ -0,0 +1,52 @@
+// Copyright (c) The Perspex Project. All rights reserved.
+// Licensed under the MIT license. See licence.md file in the project root for full license information.
+
+using System;
+using System.Globalization;
+using System.Linq;
+using OmniXaml.TypeConversion;
+using Perspex.Collections;
+using Perspex.Utilities;
+
+namespace Perspex.Markup.Xaml.Converters
+{
+    public class PerspexListTypeConverter<T> : ITypeConverter
+    {
+        public bool CanConvertFrom(IXamlTypeConverterContext context, Type sourceType)
+        {
+            return sourceType == typeof(string);
+        }
+
+        public bool CanConvertTo(IXamlTypeConverterContext context, Type destinationType)
+        {
+            return false;
+        }
+
+        public object ConvertFrom(IXamlTypeConverterContext context, CultureInfo culture, object value)
+        {
+            var result = new PerspexList<T>();
+            var values = ((string)value).Split(',');
+
+            foreach (var s in values)
+            {
+                object v;
+
+                if (TypeUtilities.TryConvert(typeof(T), s, culture, out v))
+                {
+                    result.Add((T)v);
+                }
+                else
+                {
+                    throw new InvalidCastException($"Could not convert '{s}' to {typeof(T)}.");
+                }
+            }
+
+            return result;
+        }
+
+        public object ConvertTo(IXamlTypeConverterContext context, CultureInfo culture, object value, Type destinationType)
+        {
+            throw new NotImplementedException();
+        }
+    }
+}

+ 1 - 0
src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj

@@ -38,6 +38,7 @@
     <Compile Include="..\..\Shared\SharedAssemblyInfo.cs">
       <Link>Properties\SharedAssemblyInfo.cs</Link>
     </Compile>
+    <Compile Include="Converters\PerspexListTypeConverter.cs" />
     <Compile Include="Data\IBinding.cs" />
     <Compile Include="Data\MultiBinding.cs" />
     <Compile Include="Data\RelativeSource.cs" />