Mercurial > silverbladetech
diff MetroWpf/MetroWpf.Xaml/Converters/ThicknessToDoubleConverter.cs @ 15:060f02cd4591
Initial commit, pre airport work
author | stevenh7776 stevenhollidge@hotmail.com |
---|---|
date | Mon, 12 Mar 2012 23:05:21 +0800 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MetroWpf/MetroWpf.Xaml/Converters/ThicknessToDoubleConverter.cs Mon Mar 12 23:05:21 2012 +0800 @@ -0,0 +1,86 @@ +using System; +using System.Globalization; +using System.Windows; +using System.Windows.Data; + +namespace MetroWpf.Xaml.Converters +{ + [ValueConversion(typeof(Thickness), typeof(double))] + public sealed class ThicknessToDoubleConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (!(value is Thickness)) + { + return DependencyProperty.UnsetValue; + } + + var thickness = (Thickness)value; + + var propertyName = parameter as string; + switch (propertyName) + { + case "Left": + return thickness.Left; + case "Top": + return thickness.Top; + case "Right": + return thickness.Right; + case "Bottom": + return thickness.Bottom; + default: + return (thickness.Left + thickness.Top + thickness.Bottom + thickness.Right) / 4; + } + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + if (!(value is double)) + { + return DependencyProperty.UnsetValue; + } + + var parameters = parameter as string; + if (parameters != null) + { + var propertyNames = parameters.Split(new[] { ", " }, StringSplitOptions.RemoveEmptyEntries); + if (propertyNames.Length > 0) + { + var thickness = new Thickness(0); + + var changed = false; + + foreach (var propertyName in propertyNames) + { + switch (propertyName) + { + case "Left": + thickness.Left = (double)value; + changed = true; + break; + case "Top": + thickness.Top = (double)value; + changed = true; + break; + case "Right": + thickness.Right = (double)value; + changed = true; + break; + case "Bottom": + thickness.Bottom = (double)value; + changed = true; + break; + } + } + + if (changed) + { + return thickness; + } + } + } + + return new Thickness((double)value); + } + } +} ; \ No newline at end of file