一、前言

       PopupColorEdit 是 dev中一个常用的调色盘控件,它的Color属性返回的是一个System.Windows.Media.Color对象,而不是System.Drawing.Color对象。

 

二、实例

       一般而言数据库存放的是16进制颜色表示法,那么我们需要把它转换为RGB的格式来支持PopupColorEdit控件

        View:(这里的DataColor还是16进制的,所以我们要写一个Converter)

  <dxe:PopupColorEdit  HorizontalAlignment="Center" VerticalContentAlignment="Center" Width="120"
                       AllowNullInput="False" 
                       VerticalAlignment="Center" 
                       IsTextEditable="False"
                       Color ="{Binding DataColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,Converter={x:Static cvt:ColorConverter.Instance}}"/>

      

         Converter :

    public class ColorConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value != null)
            {
                var drawingColor =  ColorTranslator.FromHtml(value.ToString());
                var mediaColor = System.Windows.Media.Color.FromArgb(drawingColor.A, drawingColor.R, drawingColor.G, drawingColor.B);
                return mediaColor;
            }
            return  System.Windows.Media.Color.FromArgb(0,0,0,0);
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value != null)
            {
                var mediacolor = (System.Windows.Media.Color)value;
                var drawingcolor = Color.FromArgb(mediacolor.A, mediacolor.R, mediacolor.G, mediacolor.B);
                return ColorTranslator.ToHtml(drawingcolor);
            }
            return "#000000";
        }

        private static ColorConverter _instance;
        public static ColorConverter Instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = new ColorConverter();
                }
                return _instance;
            }
        }
    }

         这里的Converter牵涉到了System.Windows.Media.Color 与 System.Drawing.Color的相互转换。

         System.Drawing.Color相当于System.Windows.Media.Color(RGB格式)与16进制颜色表示法的媒介。

 

三、结语

       发现工作一年多,用户体验-操作界面这块做了很多工作,Dev WPF这套MVVM的框架越写越顺手,大多数时间是在挖掘新控件,寻找人机交互的最和谐方式。

        之后会逐步往业务逻辑,产品授权优化这块儿学习新知识。

 

posted on 2017-08-12 15:42  airforce094  阅读(830)  评论(0编辑  收藏  举报