0

我有如下设置绑定

XAML

 <TextBlock Text="{Binding Path=Color, Converter={StaticResource ColorToStringConverter}}" />

C#:显示是Color什么

public System.Windows.Media.Color Color
{
    get
    {
        var color = new HSLColor { Hue = this.Hue, Saturation = this.Saturation, Luminosity = this.Luminosity };
        string strColor = color.ToRGBString();
        return new System.Windows.Media.Color { 
            R = byte.Parse(strColor.Substring(0, 2), System.Globalization.NumberStyles.HexNumber),
            G = byte.Parse(strColor.Substring(2, 2), System.Globalization.NumberStyles.HexNumber),
            B = byte.Parse(strColor.Substring(4, 2), System.Globalization.NumberStyles.HexNumber)
        };
    }
    set { SetValue(ColorProperty, value); }
}

转换器

public class ColorToStringConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        Color color = (Color)value;
        return color.ToString();
    }
}

但我的转换器越来越value

value = "{Name=0, ARGB=(0, 0, 0, 0)}"

我希望它System.Windows.Media.Color是我为什么得到这个?

基本上,我有 3 个用于 HSL 值的 Silders 绑定到DependencyProperties,每个都有一个PropertyChangedCallback附加到它们

new PropertyChangedCallback(HSLValuePropertyChanged)

看起来像

protected void HSLValueChanged()
{
    if (PropertyChanged != null)
        PropertyChanged(this, new PropertyChangedEventArgs("Color"));
}

基本上它的目的是更新绑定到依赖属性的控件Color。这个想法是get应该为Color从 HSL 属性创建新颜色的属性运行。问题似乎是即使我更改 HSL 值,get 也不会运行。

更新

所以我试图value在出现异常的情况下返回,我在文本框中什么都没有,所以我一直value.toString()都有Color [Empty]。我做错了什么?

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    try
    {
        Color color = (Color)value;
        return color.ToString();
    } catch (Exception) {
        return value.ToString();
    }
}
4

2 回答 2

3

您似乎正在使用 ColorDependencyProperty。如果是这样,我认为绑定可能永远不会真正通过访问器(get/set)......

您应该在每个 H/S/L 属性更改回调上设置新颜色(通过 setvalue 方法在dependencyProperty 中)...

我希望我很清楚:-)

于 2010-11-04T13:40:35.427 回答
1

Color当绑定到 DependencyProperty 上时,绑定不使用属性 getter 来获取值,因此,就绑定而言,您放入属性 getter 中的所有代码都将被跳过。

坚持将你的吸气剂定义为get { return (XXX)GetValue(MyProperty); }并找到另一种方法。

于 2010-11-04T13:40:49.663 回答