根据布尔无需转换器绑定Image.Source?
-
13-09-2019 - |
题
我想有绑定到一个布尔的图像和具有该图像的源依赖于布尔值
即。真源= “image1的” 假源= “图像2”
我不知道是否有一种方法可以做到这一点的内联而不需要一个转换器。
解决方案
可以创建在其上使用一个DataTrigger交换依赖于结合的图像源的图像的样式。在该示例中根据一个简称为“值”的布尔值的图像的变化。
<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>
其他提示
如果有人正在寻找值转换器的结合。这是我使用什么
<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;
}
}
界枚举
public enum DevStatus
{
Idle = 1,
Offline = 2,
Active = 3,
}
从视图模型和转换器集枚举将结合适当的图像。
<Image Source="{Binding DevStatus, Converter={StaticResource ImageConverter}}" />
如果你只是结合的Image::Source
财产直接再做到这一点的唯一方法是使用一个定制IValueConverter
。
不隶属于 StackOverflow