在WPF中,我可以处理XAML异常吗?比如,当图像试图加载零字节的内容时?
当我的XAML包含以下内容时,出现“未找到适合完成此操作的成像组件”错误:在WPF中,我可以处理XAML异常吗?比如,当图像试图加载零字节的内容时?,wpf,image,xaml,exception-handling,Wpf,Image,Xaml,Exception Handling,当我的XAML包含以下内容时,出现“未找到适合完成此操作的成像组件”错误: <Image x:Name="ProcessImage" Grid.Row="0" Stretch="Uniform"> <Image.Source> <BitmapImage CacheOption="OnLoad" UriSource="{Binding FilePath}"/> </Image.Source>
<Image x:Name="ProcessImage" Grid.Row="0" Stretch="Uniform">
<Image.Source>
<BitmapImage CacheOption="OnLoad" UriSource="{Binding FilePath}"/>
</Image.Source>
</Image>
因为文件路径指向一个零字节的图像。我怎么能让它在不破坏一切的情况下什么都不显示呢?你可以这样做;如果图像为空/空,则替换为您知道的空图像
<Image x:Name="ProcessImage" Grid.Row="0" Stretch="Uniform">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Source" Value="{Binding FilePath}" />
<Style.Triggers>
<DataTrigger Binding="{Binding FilePath}" Value="{x:Null}">
<Setter Property="Source" Value="~/images/noImg.jpg" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
试一试我不认为这种情况可以优雅地处理,但是,基本上,你有两个合适的选择和一种技巧可以尝试:
- 在绑定声明中使用一个
:这个不错的选项允许您在绑定未成功的情况下指定一个替代选项(实际上,如果FallbackValue
或路径
不正确)值转换器
UriSource
设置正确:
<BitmapImage CacheOption="OnLoad" UriSource='{Binding FilePath, FallbackValue=""}'/>
在这种情况下,解析逻辑将是FilePath
->Whatever1
->Whatever2
- 最后,您可以使用hack:将异常处理逻辑放入自定义
,如果图像正确,则返回位图数据,或者,如果出现问题,返回图像占位符(可能是有趣的HTTP 404错误图像)ValueConverter
Image.Source
属性,而不是显式创建位图图像
:
<Image x:Name="ProcessImage" Source="{Binding FilePath}" />
WPF的内置类型转换将从路径字符串或Uri自动创建一个
BitmapFrame
。如果返回null,则有TargetNullValue或转换器等。我忘记了零字节确切返回的内容,甚至可能是DataTrigger。您只需要获取该值,如果它符合该条件,则可以使用占位符加载它,甚至可以将其全部折叠在一起。如果我在URI源上使用转换器,当我注意到它指向空文件时,我将返回什么?我试图在图像本身上使用可见性转换器,但似乎Image.source内部XAML仍在执行并引发异常
<Image x:Name="ProcessImage" Source="{Binding FilePath}" />