越来越怪异值我已经安装绑定,如下WPF转换器从绑定
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个Silders为HSL值绑定到DependencyProperties
,每一个都具有PropertyChangedCallback
连接到它们
new PropertyChangedCallback(HSLValuePropertyChanged)
它看起来像
protected void HSLValueChanged()
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Color"));
}
基本上其目的是更新绑定到控制依赖项属性Color
。这个想法是get
应该为属性Color
运行,它从HSL属性创建一个新的颜色。看起来问题在于,即使我更改HSL值,get也不会运行。
UPDATE
于是,我就在一个异常的情况下,只需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();
}
}
你的意思是调用'color.ToString()'产生字符串'“{Name = 0,ARGB =(0,0,0,0)}''? – 2010-11-04 13:20:45
@Steve Greatrex,我不确定是否会自动调用toString()?当我尝试将文本框绑定到Color而没有转换器时,我什么也没有,根本没有这样的文本,所以我想也许我需要一个转换器 – 2010-11-04 13:25:46
@jiewmeng,如果你绑定到一个类型时忽略了'ToString()'调用'TextBlock',它会自动被调用。如果你在你的'Convert'方法中放置了一个断点,那么'value'是你期望的 - 一个具有正确值的'System.Windows.Media.Color'的实例?如果没有,我建议单步穿过你的Color属性获取器,看看它创建了什么 – 2010-11-04 13:28:34