Mercurial > silverbladetech
diff MetroWpf/MetroWpf.Xaml/Converters/ThicknessPositiveToNegativeConverter.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/ThicknessPositiveToNegativeConverter.cs Mon Mar 12 23:05:21 2012 +0800 @@ -0,0 +1,68 @@ +using System; +using System.Globalization; +using System.Windows; +using System.Windows.Data; + +namespace MetroWpf.Xaml.Converters +{ + [ValueConversion(typeof(Thickness), typeof(Thickness))] + public class ThicknessPositiveToNegativeConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (!(value is Thickness)) + { + return DependencyProperty.UnsetValue; + } + + var source = (Thickness)value; + + 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 = -source.Left; + changed = true; + break; + case "Top": + thickness.Top = -source.Top; + changed = true; + break; + case "Right": + thickness.Right = -source.Right; + changed = true; + break; + case "Bottom": + thickness.Bottom = -source.Bottom; + changed = true; + break; + } + } + + if (changed) + { + return thickness; + } + } + } + + return source; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + return Convert(value, targetType, parameter, culture); + } + } +} ; \ No newline at end of file