将WPF扩展工具包ColorPicker SelectedColor属性绑定到DependencyProperty

时间:2018-08-14 17:54:02

标签: c# wpf mvvm dependency-properties wpf-extended-toolkit

我正在尝试将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" />

任何帮助将不胜感激!

1 个答案:

答案 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,这意味着工具包中有一个内置转换器