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