WPF Converter получает странное значение от Binding - PullRequest
0 голосов
/ 04 ноября 2010

У меня есть настройка привязки следующим образом

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();
    }
}

Ответы [ 2 ]

3 голосов
/ 04 ноября 2010

Вы, кажется, используете ColorDependencyProperty.Если это так, я думаю, что привязка может никогда не пройти через аксессоры (get / set) ...

Вы должны установить новый цвет (в зависимости от свойства через метод setvalue) на каждом из ваших H / S/ L изменение свойств перезвонить ...

Я надеюсь, что я свободен: -)

1 голос
/ 04 ноября 2010

При привязке к свойству DependencyProperty привязки не используют методы получения свойств для получения значений, поэтому весь код, который вы вставили в метод получения свойства Color, пропускается применительно к привязкам.

Придерживайтесь определения ваших получателей как get { return (XXX)GetValue(MyProperty); } и найдите другой путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...