diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/AvaloniaListTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/AvaloniaListTypeConverter.cs index f865767e6f..d1811636d6 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/AvaloniaListTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/AvaloniaListTypeConverter.cs @@ -3,13 +3,48 @@ using System; using System.Globalization; -using System.Linq; -using OmniXaml.TypeConversion; using Avalonia.Collections; using Avalonia.Utilities; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class AvaloniaListTypeConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + var result = new AvaloniaList(); + 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; + } + } + +#else + using OmniXaml.TypeConversion; + public class AvaloniaListTypeConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -49,4 +84,5 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } +#endif } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/ClassesTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/ClassesTypeConverter.cs index 2168702940..93e08dcb11 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/ClassesTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/ClassesTypeConverter.cs @@ -3,12 +3,31 @@ using System; using System.Globalization; -using OmniXaml.TypeConversion; using Avalonia.Controls; -using Avalonia.Styling; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class ClassesTypeConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + return new Classes(((string)value).Split(' ')); + } + } + +#else + + using OmniXaml.TypeConversion; + public class ClassesTypeConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -31,4 +50,6 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } + +#endif } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/ColorTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/ColorTypeConverter.cs index d39eb96ec1..f64fcac6d1 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/ColorTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/ColorTypeConverter.cs @@ -3,11 +3,31 @@ using System; using System.Globalization; -using OmniXaml.TypeConversion; using Avalonia.Media; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class ColorTypeConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + return Color.Parse((string)value); + } + } + +#else + + using OmniXaml.TypeConversion; + public class ColorTypeConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -30,4 +50,6 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } + +#endif } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/ColumnDefinitionsTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/ColumnDefinitionsTypeConverter.cs index e23c09de55..7b6c72425d 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/ColumnDefinitionsTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/ColumnDefinitionsTypeConverter.cs @@ -3,11 +3,31 @@ using System; using System.Globalization; -using OmniXaml.TypeConversion; using Avalonia.Controls; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class ColumnDefinitionsTypeConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + return new ColumnDefinitions((string)value); + } + } + +#else + + using OmniXaml.TypeConversion; + public class ColumnDefinitionsTypeConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -30,4 +50,5 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } +#endif } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/CursorTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/CursorTypeConverter.cs index 4780a8e23a..127ad5a6e9 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/CursorTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/CursorTypeConverter.cs @@ -3,13 +3,32 @@ using System; using System.Globalization; -using OmniXaml.TypeConversion; using Avalonia.Input; -using Avalonia.Media.Imaging; -using Avalonia.Platform; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class CursorTypeConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + var cursor = (StandardCursorType)Enum.Parse(typeof(StandardCursorType), ((string)value).Trim(), true); + return new Cursor(cursor); + } + } + +#else + + using OmniXaml.TypeConversion; + public class CursorTypeConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -33,4 +52,6 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } + +#endif } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/DateTimeTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/DateTimeTypeConverter.cs index fbbe47525b..dcab3b531a 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/DateTimeTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/DateTimeTypeConverter.cs @@ -1,9 +1,13 @@ -using OmniXaml.TypeConversion; +// Copyright (c) The Avalonia 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 OmniXaml.TypeConversion; namespace Avalonia.Markup.Xaml.Converters { +#if OMNIXAML public class DateTimeTypeConverter : ITypeConverter { public object ConvertFrom(IValueContext context, CultureInfo culture, object value) @@ -55,4 +59,5 @@ namespace Avalonia.Markup.Xaml.Converters return sourceType == typeof(string); } } +#endif } diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/FontWeightConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/FontWeightConverter.cs index 00964ef043..03ac8fde7f 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/FontWeightConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/FontWeightConverter.cs @@ -1,5 +1,9 @@ -namespace Avalonia.Markup.Xaml.Converters +// Copyright (c) The Avalonia Project. All rights reserved. +// Licensed under the MIT license. See licence.md file in the project root for full license information. + +namespace Avalonia.Markup.Xaml.Converters { +#if OMNIXAML using Avalonia.Media; using OmniXaml.TypeConversion; using System; @@ -36,4 +40,5 @@ throw new NotImplementedException(); } } +#endif } diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/GeometryTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/GeometryTypeConverter.cs index 4bb8daacab..e1587480b8 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/GeometryTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/GeometryTypeConverter.cs @@ -1,8 +1,31 @@ +// Copyright (c) The Avalonia 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 Avalonia.Media; + namespace Avalonia.Markup.Xaml.Converters { - using System; - using System.Globalization; - using Media; +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class GeometryTypeConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + return StreamGeometry.Parse((string)value); + } + } + +#else + using OmniXaml.TypeConversion; public class GeometryTypeConverter : ITypeConverter @@ -27,4 +50,5 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } +#endif } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/GridLengthTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/GridLengthTypeConverter.cs index d17e4a0de0..ead49fe883 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/GridLengthTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/GridLengthTypeConverter.cs @@ -3,11 +3,31 @@ using System; using System.Globalization; -using OmniXaml.TypeConversion; using Avalonia.Controls; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class GridLengthTypeConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + return GridLength.Parse((string)value, culture); + } + } + +#else + + using OmniXaml.TypeConversion; + public class GridLengthTypeConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -30,4 +50,5 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } +#endif } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/IconTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/IconTypeConverter.cs index 31d0645722..6749d68260 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/IconTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/IconTypeConverter.cs @@ -1,17 +1,69 @@ -using System; -using System.Collections.Generic; +// Copyright (c) The Avalonia 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 System.Reflection; -using System.Text; -using System.Threading.Tasks; using Avalonia.Controls; using Avalonia.Media.Imaging; using Avalonia.Platform; -using OmniXaml.TypeConversion; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class IconTypeConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + var path = value as string; + if (path != null) + { + return CreateIconFromPath(context, path); + } + var bitmap = value as IBitmap; + if (bitmap != null) + { + return new WindowIcon(bitmap); + } + throw new NotSupportedException(); + } + + private WindowIcon CreateIconFromPath(ITypeDescriptorContext context, string path) + { + var uri = new Uri(path, UriKind.RelativeOrAbsolute); + var baseUri = GetBaseUri(context); + var scheme = uri.IsAbsoluteUri ? uri.Scheme : "file"; + + switch (scheme) + { + case "file": + return new WindowIcon(path); + default: + var assets = AvaloniaLocator.Current.GetService(); + return new WindowIcon(assets.Open(uri, baseUri)); + } + } + + private Uri GetBaseUri(ITypeDescriptorContext context) + { + throw new NotImplementedException(); + //object result; + //context.ParsingDictionary.TryGetValue("Uri", out result); + //return result as Uri; + } + } + +#else + + using OmniXaml.TypeConversion; + class IconTypeConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -67,4 +119,5 @@ namespace Avalonia.Markup.Xaml.Converters return result as Uri; } } +#endif } diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/KeyGestureConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/KeyGestureConverter.cs index 7454873a7d..1b19498f7d 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/KeyGestureConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/KeyGestureConverter.cs @@ -1,10 +1,33 @@ +// Copyright (c) The Avalonia 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 OmniXaml.TypeConversion; using Avalonia.Input; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class KeyGestureConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + return KeyGesture.Parse((string)value); + } + } + +#else + + using OmniXaml.TypeConversion; + class KeyGestureConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -27,4 +50,5 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } +#endif } diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/MemberSelectorTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/MemberSelectorTypeConverter.cs index 01ddd058fb..05675ae9eb 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/MemberSelectorTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/MemberSelectorTypeConverter.cs @@ -3,11 +3,34 @@ using System; using System.Globalization; -using OmniXaml.TypeConversion; using Avalonia.Markup.Xaml.Templates; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class MemberSelectorTypeConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + return new MemberSelector + { + MemberName = (string)value, + }; + } + } + +#else + + using OmniXaml.TypeConversion; + public class MemberSelectorTypeConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -33,4 +56,5 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } +#endif } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/PointTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/PointTypeConverter.cs index cec52e1efc..a8f64fc531 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/PointTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/PointTypeConverter.cs @@ -3,10 +3,30 @@ using System; using System.Globalization; -using OmniXaml.TypeConversion; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class PointTypeConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + return Point.Parse((string)value, culture); + } + } + +#else + + using OmniXaml.TypeConversion; + public class PointTypeConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -29,4 +49,5 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } +#endif } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/PointsListTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/PointsListTypeConverter.cs index 371ab02b69..dd28717ac7 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/PointsListTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/PointsListTypeConverter.cs @@ -4,10 +4,38 @@ using System; using System.Collections.Generic; using System.Globalization; -using OmniXaml.TypeConversion; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class PointsListTypeConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + string strValue = (string)value; + string[] pointStrs = strValue.Split(new[] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); + var result = new List(pointStrs.Length); + foreach (var pointStr in pointStrs) + { + result.Add(Point.Parse(pointStr, culture)); + } + + return result; + } + } + +#else + + using OmniXaml.TypeConversion; + public class PointsListTypeConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -37,4 +65,5 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } +#endif } diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/RelativePointTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/RelativePointTypeConverter.cs index a5576bf8c4..6f75e8a067 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/RelativePointTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/RelativePointTypeConverter.cs @@ -3,10 +3,30 @@ using System; using System.Globalization; -using OmniXaml.TypeConversion; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class RelativePointTypeConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + return RelativePoint.Parse((string)value, culture); + } + } + +#else + + using OmniXaml.TypeConversion; + public class RelativePointTypeConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -29,4 +49,5 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } +#endif } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/RelativeRectTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/RelativeRectTypeConverter.cs index fcad3ec12b..69aec39727 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/RelativeRectTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/RelativeRectTypeConverter.cs @@ -3,10 +3,30 @@ using System; using System.Globalization; -using OmniXaml.TypeConversion; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class RelativeRectTypeConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + return RelativeRect.Parse((string)value, culture); + } + } + +#else + + using OmniXaml.TypeConversion; + public class RelativeRectTypeConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -29,4 +49,5 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } +#endif } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/RowDefinitionsTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/RowDefinitionsTypeConverter.cs index a8551797e7..12145db7e7 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/RowDefinitionsTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/RowDefinitionsTypeConverter.cs @@ -3,11 +3,31 @@ using System; using System.Globalization; -using OmniXaml.TypeConversion; using Avalonia.Controls; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class RowDefinitionsTypeConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + return new RowDefinitions((string)value); + } + } + +#else + + using OmniXaml.TypeConversion; + public class RowDefinitionsTypeConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -30,4 +50,5 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } +#endif } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/SizeTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/SizeTypeConverter.cs index 668d4945a8..814dd932d0 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/SizeTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/SizeTypeConverter.cs @@ -3,10 +3,30 @@ using System; using System.Globalization; -using OmniXaml.TypeConversion; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class SizeTypeConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + return Size.Parse((string)value, culture); + } + } + +#else + + using OmniXaml.TypeConversion; + public class SizeTypeConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -29,4 +49,5 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } +#endif } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/ThicknessTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/ThicknessTypeConverter.cs index f8a976036e..754d63e5cf 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/ThicknessTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/ThicknessTypeConverter.cs @@ -3,10 +3,30 @@ using System; using System.Globalization; -using OmniXaml.TypeConversion; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class ThicknessTypeConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + return Thickness.Parse((string)value, culture); + } + } + +#else + + using OmniXaml.TypeConversion; + public class ThicknessTypeConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -29,4 +49,5 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } +#endif } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/TimeSpanTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/TimeSpanTypeConverter.cs index 3d1ffb23cd..06f725cd26 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Converters/TimeSpanTypeConverter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/TimeSpanTypeConverter.cs @@ -3,11 +3,39 @@ using System; using System.Globalization; -using OmniXaml.TypeConversion; -using Avalonia.Media; namespace Avalonia.Markup.Xaml.Converters { +#if !OMNIXAML + + using Portable.Xaml.ComponentModel; + + public class TimeSpanTypeConverter : Portable.Xaml.ComponentModel.TimeSpanConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return base.CanConvertFrom(context, sourceType); + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + var valueStr = (string)value; + if (!valueStr.Contains(":")) + { + // shorthand seconds format (ie. "0.25") + var secs = double.Parse(valueStr, CultureInfo.InvariantCulture); + return TimeSpan.FromSeconds(secs); + } + + return base.ConvertFrom(context, culture, value); + } + } + +#else + + using OmniXaml.TypeConversion; + using Avalonia.Media; + public class TimeSpanTypeConverter : ITypeConverter { public bool CanConvertFrom(IValueContext context, Type sourceType) @@ -38,4 +66,5 @@ namespace Avalonia.Markup.Xaml.Converters throw new NotImplementedException(); } } +#endif } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaDefaultTypeConverters.cs b/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaDefaultTypeConverters.cs index d135d0e4c4..cb43396a32 100644 --- a/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaDefaultTypeConverters.cs +++ b/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaDefaultTypeConverters.cs @@ -7,6 +7,10 @@ using Avalonia.Media; using Avalonia.Media.Imaging; using Avalonia.Styling; using Portable.Xaml.ComponentModel; +using Avalonia.Controls; +using Avalonia.Input; +using Avalonia.Collections; +using Avalonia.Controls.Templates; namespace Avalonia.Markup.Xaml.PortableXaml { @@ -17,29 +21,29 @@ namespace Avalonia.Markup.Xaml.PortableXaml //avalonia default converters { typeof(IBitmap), typeof(BitmapTypeConverter)}, { typeof(IBrush), typeof(BrushTypeConverter) }, - //{ typeof(Color), typeof(ColorTypeConverter) }, - //{ typeof(Classes), typeof(ClassesTypeConverter) }, - //{ typeof(ColumnDefinitions), typeof(ColumnDefinitionsTypeConverter) }, + { typeof(Color), typeof(ColorTypeConverter) }, + { typeof(Classes), typeof(ClassesTypeConverter) }, + { typeof(ColumnDefinitions), typeof(ColumnDefinitionsTypeConverter) }, //{ typeof(DateTime), typeof(DateTimeTypeConverter) }, - //{ typeof(Geometry), typeof(GeometryTypeConverter) }, - //{ typeof(GridLength), typeof(GridLengthTypeConverter) }, - //{ typeof(KeyGesture), typeof(KeyGestureConverter) }, - //{ typeof(AvaloniaList), typeof(AvaloniaListTypeConverter) }, - //{ typeof(IMemberSelector), typeof(MemberSelectorTypeConverter) }, - //{ typeof(Point), typeof(PointTypeConverter) }, - //{ typeof(IList), typeof(PointsListTypeConverter) }, + { typeof(Geometry), typeof(GeometryTypeConverter) }, + { typeof(GridLength), typeof(GridLengthTypeConverter) }, + { typeof(KeyGesture), typeof(KeyGestureConverter) }, + { typeof(AvaloniaList), typeof(AvaloniaListTypeConverter) }, + { typeof(IMemberSelector), typeof(MemberSelectorTypeConverter) }, + { typeof(Point), typeof(PointTypeConverter) }, + { typeof(IList), typeof(PointsListTypeConverter) }, { typeof(AvaloniaProperty), typeof(AvaloniaPropertyTypeConverter) }, - //{ typeof(RelativePoint), typeof(RelativePointTypeConverter) }, - //{ typeof(RelativeRect), typeof(RelativeRectTypeConverter) }, - //{ typeof(RowDefinitions), typeof(RowDefinitionsTypeConverter) }, - //{ typeof(Size), typeof(SizeTypeConverter) }, + { typeof(RelativePoint), typeof(RelativePointTypeConverter) }, + { typeof(RelativeRect), typeof(RelativeRectTypeConverter) }, + { typeof(RowDefinitions), typeof(RowDefinitionsTypeConverter) }, + { typeof(Size), typeof(SizeTypeConverter) }, { typeof(Selector), typeof(SelectorTypeConverter)}, { typeof(SolidColorBrush), typeof(BrushTypeConverter) }, - //{ typeof(Thickness), typeof(ThicknessTypeConverter) }, - //{ typeof(TimeSpan), typeof(TimeSpanTypeConverter) }, + { typeof(Thickness), typeof(ThicknessTypeConverter) }, + { typeof(TimeSpan), typeof(TimeSpanTypeConverter) }, //{ typeof(Uri), typeof(Converters.UriTypeConverter) }, - //{ typeof(Cursor), typeof(CursorTypeConverter) }, - //{ typeof(WindowIcon), typeof(IconTypeConverter) }, + { typeof(Cursor), typeof(CursorTypeConverter) }, + { typeof(WindowIcon), typeof(IconTypeConverter) }, //{ typeof(FontWeight), typeof(FontWeightConverter) }, };