Browse Source

Allow StrokeDashArray in XAML.

pull/297/head
Steven Kirk 11 years ago
parent
commit
b3cdd92398
  1. 4
      samples/XamlTestApplicationPcl/TreeViewItem.paml
  2. 3
      src/Markup/Perspex.Markup.Xaml/Context/PerspexWiringContext.cs
  3. 52
      src/Markup/Perspex.Markup.Xaml/Converters/PerspexListTypeConverter.cs
  4. 1
      src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj

4
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
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
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
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" />

Loading…
Cancel
Save