一、前言
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的框架越写越顺手,大多数时间是在挖掘新控件,寻找人机交互的最和谐方式。
之后会逐步往业务逻辑,产品授权优化这块儿学习新知识。