es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convertidor de enlace cómo pasar un parámetro a una función

En mi archivo window.xaml tengo el siguiente código:

xmlns:converters="clr-namespace:HMIPlc.Helpers"

<window.resources>
    <resourcedictionary>
        <converters:colorconverter x:key="ColorOnChange"></converters:colorconverter>
    </resourcedictionary>
</window.resources>

<rectangle fill="{Binding Path=varUnit.InSimulation, Converter={StaticResource ColorOnChange}}"></rectangle>

Quiero también dar un valor de tipo string, “Yellow” o “Orange”, a la función, de manera que pueda utilizar la misma función para diferentes rectángulos con diferentes colores.

Mi clase ColorConverter.cs dentro del directorio Helpers es la siguiente:

public class ColorConverter : IValueConverter
{
    public ColorConverter()
    {
    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool tempBool = (bool)value;
        if(tempBool == true)
        {
            return new SolidColorBrush(Colors.Orange);
        } else
        {
            return new SolidColorBrush(Colors.White);
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

De esta manera puedo determinar en mi XAML si el color debe ser naranja o amarillo. ¿Existe algún otro método para hacer esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes utilizar el objeto parameter en tu clase ColorConverter para pasar un valor de tipo string desde XAML y utilizarlo para determinar el color. Aquí te mostramos cómo puedes modificar tu código:

    En tu archivo window.xaml, puedes pasar el valor de tipo string de la siguiente manera:

    <rectangle fill="{Binding Path=varUnit.InSimulation, Converter={StaticResource ColorOnChange}, ConverterParameter='Amarillo'}"></rectangle>
    

    En tu clase ColorConverter.cs, modifica el método Convert para que acepte el parámetro:

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool tempBool = (bool)value;
        if(tempBool == true)
        {
            if(parameter != null && parameter.ToString() == "Amarillo")
            {
                return new SolidColorBrush(Colors.Yellow);
            }
            else
            {
                return new SolidColorBrush(Colors.Naranja);
            }
        }
        else
        {
            return new SolidColorBrush(Colors.Blanco);
        }
    }
    

    Ahora, si el valor del ConverterParameter en XAML está establecido como “Amarillo”, el rectángulo se llenará con el color Amarillo en lugar de Naranja. Puedes utilizar la misma clase ColorConverter para diferentes rectángulos con diferentes colores al pasar un valor de parámetro diferente para cada uno.

Comments are closed.