У меня есть настройка привязки следующим образом
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.Кажется, проблема в том, что get не запускается, даже когда я изменяю значения HSL.
ОБНОВЛЕНИЕ
Поэтому я попытался вернуть только 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();
}
}