view MetroWpf/MetroWpf.Xaml/Converters/DoubleToGridLengthConverter.cs @ 85:4863009a2edf

renamed bugs to todo
author Steven Hollidge <stevenhollidge@hotmail.com>
date Tue, 24 Apr 2012 00:52:39 +0100
parents 060f02cd4591
children
line wrap: on
line source

using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;

namespace MetroWpf.Xaml.Converters
{
    [ValueConversion(typeof(double), typeof(GridLength))]
    public sealed class DoubleToGridLengthConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (!(value is double))
            {
                return new GridLength(0.0, GridUnitType.Auto);
            }

            var unitType = parameter as string;

            switch (unitType)
            {
                case "Auto":
                    return new GridLength(0.0, GridUnitType.Auto);
                case "*":
                    return new GridLength((double)value, GridUnitType.Star);
                default:
                    return new GridLength((double)value, GridUnitType.Pixel);
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var unitType = parameter as string;

            if (!(value is GridLength))
            {
                return DependencyProperty.UnsetValue;
            }

            var length = (GridLength)value;
            switch (unitType)
            {
                case "Auto":
                    return length.IsAuto ? length.Value : DependencyProperty.UnsetValue;
                case "*":
                    return length.IsStar ? length.Value : DependencyProperty.UnsetValue;
                default:
                    return length.IsAbsolute ? length.Value : DependencyProperty.UnsetValue;
            }
        }
    }
} ;