Pregunta

Quiero tener una imagen con destino a un valor lógico y tienen la fuente de la imagen que depende del valor booleano

es decir. verdadera fuente = "imagen1" falsa fuente = "image2"

Me preguntaba si hay una manera de hacerlo en línea sin necesidad de un convertidor.

¿Fue útil?

Solución

Puede crear un estilo en la imagen que utiliza una DataTrigger para cambiar la fuente de imagen dependiendo de una unión. En este ejemplo, la imagen cambia en función del valor de un booleano llamado simplemente "Valor".

    <Image Width="16">
        <Image.Style>
            <Style TargetType="{x:Type Image}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Value}" Value="False">
                        <Setter Property="Source" Value="Resources/image1.png"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Value}" Value="True">
                        <Setter Property="Source" Value="Resources/image2.png"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Image.Style>
    </Image>

Otros consejos

Si alguien está buscando Valor convertidor para la unión. Esto es lo que solía

<Image Source="{Binding Converter={StaticResource ImageConverter},ConverterParameter=\{Status\}}" />

public class StatusToImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string statusValue = parameter.ToString().ToUpper();

        if (!string.IsNullOrEmpty(statusValue))
        {
            string result = string.Empty;

            switch (statusValue)
            {
                case "IDLE":
                    result = "idle.png";
                    break;
                case "OFFLINE":
                    result = "offline.png";
                    break;
                default:
                    result = "online.png";
                    break;
            }

            var uri = new Uri("pack://application:,,,/PIE;component/Images/" + result);

            return uri;
        }

        return string.Empty;
    }

    // No need to implement converting back on a one-way binding
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return DependencyProperty.UnsetValue;
    }
}

acotada Enum

public enum DevStatus 
{ 
   Idle = 1,
   Offline = 2, 
   Active = 3, 
}

Conjunto de enumeración del modelo de vista y el convertidor va a unir la imagen correspondiente.

<Image Source="{Binding DevStatus, Converter={StaticResource ImageConverter}}" />

Si acaba de unión a la propiedad directamente Image::Source entonces la única manera de lograr esto es con un IValueConverter personalizado.

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