如何根据布尔值绑定Image.Source而不使用转换器?

15

我想将一张图片与一个布尔值绑定,并使图片的来源取决于该布尔值的值。

例如,当布尔值为true时,来源为"image1",布尔值为false时,则来源为"image2"。

我想知道是否有一种内联的方法来实现这个功能,而不需要使用转换器。

3个回答

50

您可以在图像上创建一个样式,使用DataTrigger根据绑定来交换图像源。在此示例中,图像会根据一个名为"Value"的布尔值的值而更改。

    <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>

这对不同元素的属性有效吗?例如,如果我想根据标签的值绑定图像,是否可以以相同的方式工作?您能详细说明一下吗? - user3841581

3
如果有人正在寻找绑定的值转换器,那么这是我使用的内容。
<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, 
}

从ViewModel设置枚举,转换器将绑定适当的图像。

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

您能否解释一下 "ConverterParameter={Status}" 这部分的含义? - user3841581
在我的情况下,它是一个枚举值 public enum DeviceStatus { Idle = 1, Offline = 2, Active = 3, } - dnxit
<Image Source="{Binding DevStatus, Converter={StaticResource ImageConverter}}" /> - dnxit
你使用了MVVM模型吗?如果是,你把这些细节放在ViewModel里还是View里了? - user3841581

0

如果你只是直接绑定 Image::Source 属性,那么实现这个功能的唯一方法就是使用自定义的 IValueConverter


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接