20

我正在使用绑定作为Image控件的源。

<Image Source="{Binding ImageUri}"/>

但这ImageUri可以为空,因此我想为此使用默认图像,占位符,/Assets/PlaceHolder.png例如可以在其中。

如何设置默认图像?谢谢。 (这是一个 WP8 应用程序,但不应与 WPF 不同)

4

7 回答 7

32

您可以通过设置来实现TargetNullValue

<Image>
    <Image.Source>
        <Binding Path="ImageUri" >
            <Binding.TargetNullValue>
                <ImageSource>/Assets/PlaceHolder.png</ImageSource>
            </Binding.TargetNullValue>
        </Binding>
    </Image.Source>
</Image>
于 2013-08-31T04:27:40.673 回答
4

实际上,您可以采取相反的方式,在我看来,这是一种更好的体验,只需在布局中使用两个Image控件,一个使用本地占位符源,一个使用远程. 当您的远程绑定为空时,本地图像已经存在。但是,如果绑定不为空,它会在渲染后自动覆盖本地占位符图像。GridBinding

<Grid>
    <Image Source="Assets/Placeholder.png"/>
    <Image Source="{Binding ImageUri}"/>
</Grid>
于 2015-07-20T21:42:50.433 回答
3

您可以在图像上设置 ImageFailed 事件,

<Image Source="{Binding ImageUri}" ImageFailed="Image_ImageFailed"/>

并使用以下 C# 在其位置加载特定图像。

private void Image_ImageFailed(object sender, ExceptionRoutedEventArgs e)
{
    ((Image)sender).Source = new BitmapImage(new Uri("/Assets/MyDefaultImage.png", UriKind.Relative));
}
于 2013-09-26T12:06:25.913 回答
2

你可以试试这个:

<Image>
    <Image.Source>
        <Binding Path="ImageUri">
            <Binding.TargetNullValue>
                <BitmapImage UriSource="/ProjName;component/Assets/PlaceHolder.png" />                    
            </Binding.TargetNullValue>
        </Binding>
    </Image.Source>
</Image>
于 2019-03-11T07:57:28.480 回答
1

您可以使用ImageFailed事件和ChangePropertyAction

这段代码片段对我有用:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"

<Image x:Name="GeologyMapsLegend" Stretch="Fill" Height="150">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="ImageFailed">
            <ei:ChangePropertyAction PropertyName="Source" TargetName="GeologyMapsLegend">
                <ei:ChangePropertyAction.Value>
                    <ImageSource>
                        /LanSysWebGIS;component/Pictures/Icon/NoImageAvailable.jpg
                    </ImageSource>
                </ei:ChangePropertyAction.Value>
            </ei:ChangePropertyAction>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Image>
于 2013-09-02T06:48:03.707 回答
1

使用TargetNullValue属性。如果我不想显示任何图像,这将非常有帮助。

于 2016-08-03T12:23:41.973 回答
-2

你应该试着在这里玩FallBackValue。这两个链接应该提供更多帮助

WPF 绑定 - 空字符串的默认值

MSDN

于 2013-08-31T02:15:21.173 回答