什么';WPF是如何向现有的颜色编辑器添加对该功能的支持的?
我正在使用WPF扩展工具包的属性编辑器,我需要使用此工具包附带的颜色编辑器添加对编辑什么';WPF是如何向现有的颜色编辑器添加对该功能的支持的?,wpf,dependency-properties,color-picker,Wpf,Dependency Properties,Color Picker,我正在使用WPF扩展工具包的属性编辑器,我需要使用此工具包附带的颜色编辑器添加对编辑System.Drawing.Color的支持 当前颜色编辑器通过颜色选择器组件完成其工作,并且似乎使用数据绑定将颜色选择器的SelectedColor属性直接连接到已编辑对象的颜色属性。不幸的是,工具箱的编辑器是通过返回一个要绑定的dependencProperty来实现的,而不是通过要求自己绑定来实现的,所以就没有了 我只看到其他两种方法: 复制整个颜色选择器,更改其编辑的特性的类型。出于显而易见的原因,这
System.Drawing.Color
的支持
当前颜色编辑器通过颜色选择器组件完成其工作,并且似乎使用数据绑定将颜色选择器的SelectedColor
属性直接连接到已编辑对象的颜色属性。不幸的是,工具箱的编辑器是通过返回一个要绑定的dependencProperty
来实现的,而不是通过要求自己绑定来实现的,所以就没有了
我只看到其他两种方法:
- 复制整个颜色选择器,更改其编辑的特性的类型。出于显而易见的原因,这是我最不想做的事情
- 从颜色选择器中公开第二个颜色属性,类型为
,以便我的新颜色编辑器可以告诉属性网格绑定到该属性。但有人告诉我,拥有两个具有相同基础值的依赖属性是一个糟糕的想法System.Drawing.Color
如果我真的应该在颜色选择器组件中公开两种颜色属性,那么保持它们“同步”的正确方法是什么?您可以使用值转换器将数据绑定到
System.Drawing.Color
。这在我的测试环境中起作用
public class SystemDrawingColorConverter : IValueConverter
{
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
System.Windows.Media.Color color = (System.Windows.Media.Color)value;
return System.Drawing.Color.FromArgb(color.A, color.R, color.G, color.B);
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
System.Drawing.Color color = (System.Drawing.Color)value;
return System.Windows.Media.Color.FromArgb(color.A, color.R, color.G, color.B);
}
}
XAML:
<Grid>
<Grid.Resources>
<local:SystemDrawingColorConverter x:Key="converter" />
</Grid.Resources>
<Grid.DataContext>
<local:VM />
</Grid.DataContext>
<tk:ColorPicker SelectedColor="{Binding Color, Converter={StaticResource converter}}" />
</Grid>
您可以使用值转换器将数据绑定到
系统.Drawing.Color
。这在我的测试环境中起作用
public class SystemDrawingColorConverter : IValueConverter
{
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
System.Windows.Media.Color color = (System.Windows.Media.Color)value;
return System.Drawing.Color.FromArgb(color.A, color.R, color.G, color.B);
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
System.Drawing.Color color = (System.Drawing.Color)value;
return System.Windows.Media.Color.FromArgb(color.A, color.R, color.G, color.B);
}
}
XAML:
<Grid>
<Grid.Resources>
<local:SystemDrawingColorConverter x:Key="converter" />
</Grid.Resources>
<Grid.DataContext>
<local:VM />
</Grid.DataContext>
<tk:ColorPicker SelectedColor="{Binding Color, Converter={StaticResource converter}}" />
</Grid>
完美的翻阅这个属性网格的源代码,发现TypeEditor类实际上允许我指定一个IValueConverter。因此,我的网格现在完全支持GDI颜色。谢谢完美的翻阅这个属性网格的源代码,发现TypeEditor类实际上允许我指定一个IValueConverter。因此,我的网格现在完全支持GDI颜色。谢谢