我正在尝试将WPF扩展工具包ColorPicker的SelectedColor
属性绑定到类型为DependencyProperty
的{{1}}。然后应将此颜色用作位于画布上/画布中的Shape的填充颜色。
这不起作用,据我了解,问题在于ColorPicker的SolidColorBrush
属性实际上是类型为SelectedColor
的对象。我的问题是,如何使它工作?如果我只是通过与事件相关的方法在代码中执行此操作,则可以使用Color?
,但是AFAIK在XAML中不是可选项。
我确实尝试使用常规属性并使类从SelectedColor.Value
继承(如SelectedColor binding doesn't update from ColorPicker to Model),而不是从INotifyPropertyChanged
继承,但这也不起作用。< / p>
我更喜欢通过Binding来完成此操作,因为在使用MVVM的实践中我试图获得更多信息。我只是最近才学会了如何使用MVVM,现在我实际上更喜欢它,所以我真的想避免只使用后台代码。
XAML:
DependencyObject
C#: 私有静态DependencyProperty FillColorProperty = DependencyProperty.Register(“ FillColor”,typeof(SolidColorBrush), typeof(TuckboxModel),新的FrameworkPropertyMetadata(Brushes.Purple));
<toolkit:ColorPicker x:Name="fillColor" Grid.Column="1" Grid.Row="8" Margin="5" VerticalAlignment="Top" SelectedColor="{Binding Path=FillColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedColorChanged="fillColor_SelectedColorChanged" />
<toolkit:ColorPicker x:Name="lineColor" Grid.Column="2" Grid.Row="8" Margin="5" VerticalAlignment="Top" />
任何帮助将不胜感激!
答案 0 :(得分:0)
我认为Converter
是您的麻烦的答案。这是转换器类的示例:
using System;
using System.Globalization;
using System.Windows.Data;
namespace SO_app.Converters
{
public class DebugConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (null == value) {
return null;
}
// For a more sophisticated converter, check also the targetType and react accordingly..
if (value is Color) {
Color color = (Color)value;
return new SolidColorBrush(color);
}
// You can support here more source types if you wish
// For the example I throw an exception
Type type = value.GetType();
throw new InvalidOperationException("Unsupported type ["+type.Name+"]");
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
}
然后在您的xaml中看起来像这样:
这是我的项目:
xmlns:converter="clr-namespace:SO_app.Converters"
然后在资源中:
<converter:DebugConverter x:Key="DebugConverter"/>
然后使用xaml:
<toolkit:ColorPicker x:Name="fillColor" Grid.Column="1" Grid.Row="8" Margin="5" VerticalAlignment="Top" SelectedColor="{Binding Path=FillColor, Converter={StaticResource DebugConverter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedColorChanged="fillColor_SelectedColorChanged" />
注意:
类型转换的代码来自此SO post。
更新:
选中this SO post,这意味着工具包中有一个内置转换器