web-dev-qa-db-ja.com

バインディングソースがnullの場合、画像のデフォルトソースを設定するにはどうすればよいですか?

Imageコントロールのソースにバインディングを使用しています。

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

ただし、このImageUriはnullになる可能性があるため、デフォルトの画像であるプレースホルダーを使用します。これは、たとえば/Assets/PlaceHolder.pngに含めることができます。

デフォルトの画像を設定するにはどうすればよいですか?ありがとう。 (これはWP8アプリですが、WPFと異なるべきではありません)

15
user2715606

TargetNullValueを設定することでそれを達成できます

<Image>
    <Image.Source>
        <Binding Path="ImageUri" >
            <Binding.TargetNullValue>
                <ImageSource>/Assets/PlaceHolder.png</ImageSource>
            </Binding.TargetNullValue>
        </Binding>
    </Image.Source>
</Image>
23
Nitesh

画像に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));
}
3
ZombieSheep

Imageレイアウトで2つのGridコントロールを使用するだけで、実際には逆の方法をとることができます。1つはローカルプレースホルダーソースを使用し、もう1つはリモートBindingを使用します。リモートバインディングがnullの場合、ローカルイメージはすでに存在します。ただし、バインディングがnullでない場合は、レンダリングされると、ローカルプレースホルダー画像が自動的にカバーされます。

<Grid>
    <Image Source="Assets/Placeholder.png"/>
    <Image Source="{Binding ImageUri}"/>
</Grid>
3
Shikhar

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

TargetNullValue属性を使用します。画像を表示したくない場合に非常に役立ちます。

0
Muhammad Ammar

あなたはこれを試すことができます:

<Image>
    <Image.Source>
        <Binding Path="ImageUri">
            <Binding.TargetNullValue>
                <BitmapImage UriSource="/ProjName;component/Assets/PlaceHolder.png" />                    
            </Binding.TargetNullValue>
        </Binding>
    </Image.Source>
</Image>