WPF convertidor de obtener el valor de la unión extraña
-
28-09-2019 - |
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();
}
}
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.