在WPF中处理无效的图像源

本文关键字:图像 无效 处理 WPF | 更新日期: 2023-09-27 18:10:27

我有一个视图,它被绑定到viewmodel中的字符串资源,它可以很好地链接到网络上的图像或硬盘图像文件。但是,如果选择了不良的图像源,则由于明显的原因,图像不会显示。是否有一个绑定,我可以做,看看是否有一个有效的图像源或是否有一种方法来放置一个默认的图像,如果源是坏的。

ViewModel中的属性:

    public string ImageSource
    {
        get { return imageSource; }
        set
        {
            imageSource = value;
            NotifyPropertyChange("ImageSource");
        }
    }
Xaml:

<Image Grid.Row="0" Name="picture" Source="{Binding ImageSource}" Height="auto" Width="auto" MaxWidth="750" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"  />

在WPF中处理无效的图像源

如果ImageSource保证对不良图像为null,则可以使用数据触发器:

<Image Grid.Row="0" Name="picture" Height="auto" Width="auto" MaxWidth="750" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
        <Image.Style>
            <Style TargetType="{x:Type Image}">
                <Setter Property="Source" Value="{Binding ImageSource}" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ImageSource}" Value="{x:Null}">
                        <Setter Property="Source" Value="default_image.png" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Image.Style>
    </Image>

Binding具有完全针对您的场景的TargetNullValue属性:

<Image Source="{Binding ImageSource, 
                        TargetNullValue={StaticResource DefaultImage}}" />    

当然,资源必须在某处定义:<BitmapImage x:Key="DefaultImage" UriSource="default_image" />