Pregunta

Tengo unión configura como sigue:

XAML

 <TextBlock Text="{Binding Path=Color, Converter={StaticResource ColorToStringConverter}}" />

C #: Mostrando lo Color es

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

convertidor de

public class ColorToStringConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        Color color = (Color)value;
        return color.ToString();
    }
}

Pero mi convertidor está recibiendo value como

value = "{Name=0, ARGB=(0, 0, 0, 0)}"

yo esperaría que fuera un System.Windows.Media.Color ¿Por qué recibo esto?

Básicamente, tengo 3 silders para los valores HSL unidos a DependencyProperties, tienen cada uno un PropertyChangedCallback unido a ellos

new PropertyChangedCallback(HSLValuePropertyChanged)

Parece

protected void HSLValueChanged()
{
    if (PropertyChanged != null)
        PropertyChanged(this, new PropertyChangedEventArgs("Color"));
}

Básicamente su objetivo es actualizar los controles unidos a la Color propiedad de dependencia. La idea es que get debe ejecutar para Color propiedad que crea un nuevo color de las propiedades HSL. El problema parece es que el get no se ejecuta incluso cuando cambie los valores HSL.

Actualizar

Así que traté de devolver sólo value en el caso de una excepción, no tengo nada en el cuadro de texto, por lo que hice value.toString() consiguió Color [Empty] todo el tiempo. ¿Qué hice mal?

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();
    }
}
¿Fue útil?

Solución

Estas usando el ColorDependencyProperty. Si es así, creo que la unión puede realmente nunca pasan a través de los descriptores de acceso (get / set) ...

Se debe establecer el nuevo color (en el DependencyProperty a través del método FijarValor) en cada uno de su H / S / L propiedades de espalda cambios llamada ...

Espero ser claro: -)

Otros consejos

Cuando se unen en una propiedad de dependencia, los enlaces no lo utilizo de captadores de propiedad para obtener valores, así, todo el código se pone en la propiedad de captador Color se omite en lo que se refiere a las consolidaciones.

Se adhieren a la definición de sus captadores como get { return (XXX)GetValue(MyProperty); } y encontrar otra manera alrededor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top