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