我的设置绑定如下
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个Silder,HSL值绑定到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();
}
}
答案 0 :(得分:3)
您似乎正在使用ColorDependencyProperty。 如果是这样,我认为绑定可能永远不会通过访问器(获取/设置)......
您应该在每个H / S / L属性更改回调中设置新颜色(通过setvalue方法在dependencyProperty中)...
我希望我很清楚: - )
答案 1 :(得分:1)
当绑定在DependencyProperty上时,绑定不会使用属性getter来获取值,因此,就绑定而言,所有放在Color
属性getter中的代码都会被跳过。
坚持将你的吸气剂定义为get { return (XXX)GetValue(MyProperty); }
并找到另一种方法。