From 0941ba7afaf5fe55c81c85157f9fd2f512587484 Mon Sep 17 00:00:00 2001 From: Seeker1437 Date: Thu, 7 Jul 2016 10:06:01 -0400 Subject: [PATCH] Adds DateTimeTypeConverter --- .../Avalonia.Markup.Xaml.csproj | 3 +- .../Context/AvaloniaTypeFeatureProvider.cs | 23 ++++---- .../Converters/DateTimeTypeConverter.cs | 58 +++++++++++++++++++ 3 files changed, 72 insertions(+), 12 deletions(-) create mode 100644 src/Markup/Avalonia.Markup.Xaml/Converters/DateTimeTypeConverter.cs diff --git a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj b/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj index 31e3930a49..a3c6a0dbbd 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj +++ b/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj @@ -1,4 +1,4 @@ - + @@ -59,6 +59,7 @@ + diff --git a/src/Markup/Avalonia.Markup.Xaml/Context/AvaloniaTypeFeatureProvider.cs b/src/Markup/Avalonia.Markup.Xaml/Context/AvaloniaTypeFeatureProvider.cs index a0411b1d84..52f3fcc16b 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Context/AvaloniaTypeFeatureProvider.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Context/AvaloniaTypeFeatureProvider.cs @@ -1,15 +1,6 @@ // 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.Collections.Generic; -using System.Linq; -using System.Reflection; -using OmniXaml; -using OmniXaml.Builder; -using OmniXaml.TypeConversion; -using OmniXaml.TypeConversion.BuiltInConverters; -using OmniXaml.Typing; using Avalonia.Collections; using Avalonia.Controls; using Avalonia.Controls.Templates; @@ -19,13 +10,22 @@ using Avalonia.Media; using Avalonia.Media.Imaging; using Avalonia.Metadata; using Avalonia.Styling; +using OmniXaml; +using OmniXaml.Builder; +using OmniXaml.TypeConversion; +using OmniXaml.TypeConversion.BuiltInConverters; +using OmniXaml.Typing; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; using OmniMetadata = OmniXaml.Typing.Metadata; namespace Avalonia.Markup.Xaml.Context { public class AvaloniaTypeFeatureProvider : ITypeFeatureProvider { - private Dictionary _metadata = + private Dictionary _metadata = new Dictionary(); private Dictionary _typeConverters = @@ -100,7 +100,7 @@ namespace Avalonia.Markup.Xaml.Context result = property.Name; } - + if (result != null) { return result; @@ -154,6 +154,7 @@ namespace Avalonia.Markup.Xaml.Context RegisterTypeConverter(typeof(Color), new ColorTypeConverter()); RegisterTypeConverter(typeof(Classes), new ClassesTypeConverter()); RegisterTypeConverter(typeof(ColumnDefinitions), new ColumnDefinitionsTypeConverter()); + RegisterTypeConverter(typeof(DateTime), new DateTimeTypeConverter()); RegisterTypeConverter(typeof(Geometry), new GeometryTypeConverter()); RegisterTypeConverter(typeof(GridLength), new GridLengthTypeConverter()); RegisterTypeConverter(typeof(KeyGesture), new KeyGestureConverter()); diff --git a/src/Markup/Avalonia.Markup.Xaml/Converters/DateTimeTypeConverter.cs b/src/Markup/Avalonia.Markup.Xaml/Converters/DateTimeTypeConverter.cs new file mode 100644 index 0000000000..fbbe47525b --- /dev/null +++ b/src/Markup/Avalonia.Markup.Xaml/Converters/DateTimeTypeConverter.cs @@ -0,0 +1,58 @@ +using OmniXaml.TypeConversion; +using System; +using System.Globalization; + +namespace Avalonia.Markup.Xaml.Converters +{ + public class DateTimeTypeConverter : ITypeConverter + { + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) + { + if (culture == null) + { + throw new ArgumentNullException("culture"); + } + + if (value == null) + { + throw new ArgumentNullException("value"); + } + + DateTimeFormatInfo dateTimeFormatInfo = (DateTimeFormatInfo)culture.GetFormat(typeof(DateTimeFormatInfo)); + DateTime d = DateTime.ParseExact(value.ToString(), dateTimeFormatInfo.ShortDatePattern, culture); + return d; + } + + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) + { + if (destinationType == null) + { + throw new ArgumentNullException("destinationType"); + } + + if (culture == null) + { + throw new ArgumentNullException("culture"); + } + + DateTime? d = value as DateTime?; + + if (!d.HasValue || destinationType != typeof(string)) + { + throw new NotSupportedException(); + } + DateTimeFormatInfo dateTimeFormatInfo = (DateTimeFormatInfo)culture.GetFormat(typeof(DateTimeFormatInfo)); + return d.Value.ToString(dateTimeFormatInfo.ShortDatePattern, culture); + } + + public bool CanConvertTo(IValueContext context, Type destinationType) + { + return destinationType == typeof(string); + } + + public bool CanConvertFrom(IValueContext context, Type sourceType) + { + return sourceType == typeof(string); + } + } +}