我有如下设置绑定
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();
}
}