Enlazar Image.Source acuerdo con booleana sin un convertidor?
-
13-09-2019 - |
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.
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.