如果绑定源为null,如何为Image设置默认源?

时间:2013-08-31 00:29:10

标签: wpf xaml windows-phone-7 windows-phone-8

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

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

但是这个ImageUri可以为null,因此我想使用默认图像,占位符,例如/Assets/PlaceHolder.png

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

8 个答案:

答案 0 :(得分:22)

您可以通过设置TargetNullValue

来实现
<Image>
    <Image.Source>
        <Binding Path="ImageUri" >
            <Binding.TargetNullValue>
                <ImageSource>/Assets/PlaceHolder.png</ImageSource>
            </Binding.TargetNullValue>
        </Binding>
    </Image.Source>
</Image>

答案 1 :(得分: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));
}

答案 2 :(得分:3)

在我看来,你只需在Image布局中使用两个Grid控件,一个使用本地占位符源,另一个使用远程{ {1}}。远程绑定为空时,本地映像已存在。但是,如果绑定不为null,则在呈现后它会自动覆盖本地占位符图像。

Binding

答案 3 :(得分: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>

答案 4 :(得分:0)

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

答案 5 :(得分:0)

您可以尝试以下方法:

Aws.config.update(
credentials: Aws::Credentials.new("access_key_id", "secret_access_key"),
region: "region"
)

s3 = Aws::S3::Resource.new.bucket("bucket")
obj = s3.object('perspectives/images/3547/original/1.jpg')
obj.delete

答案 6 :(得分:0)

好的,所以我知道这有点老了,但我想我有一个最简单的 我正在寻找相同的问题,发现它实际上确实非常有效

创建一个网格和一个网格列,并向其中添加两张图片,然后将它们分配到同一列,以使它们彼此重叠,不分配z索引或仅添加默认图像,然后添加绑定的任何内容到需要从数据库加载的图像,完成了。现在,如果图像为null,则绑定源将是透明的,并且后面的默认图像将是可见的,

如果您不了解很多代码,这是最简单的方法

注意:最好添加一个较小的png图像,但在其中任何一个上都能正常工作

xaml代码

            <Grid>

                <Image Source="Images/cartoon-woman-Pretty.Png" Stretch="Uniform" 
                Height="230" Width="180"/>    

                <Image  Stretch="Uniform" x:Name="mimg" Height="230" Width="180" />
                           x
                          / \ 
                           |__ (BINDING IMAGE SOURCE WITH NAME)


            </Grid>

C#代码

mimg.Source = new BitmapImage(new Uri(dr.GetString("Photo_path"))); 

答案 7 :(得分:-1)

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

WPF Binding - Default value for empty string

MSDN