Image
コントロールのソースにバインディングを使用しています。
<Image Source="{Binding ImageUri}"/>
ただし、このImageUri
はnullになる可能性があるため、デフォルトの画像であるプレースホルダーを使用します。これは、たとえば/Assets/PlaceHolder.png
に含めることができます。
デフォルトの画像を設定するにはどうすればよいですか?ありがとう。 (これはWP8アプリですが、WPFと異なるべきではありません)
TargetNullValue
を設定することでそれを達成できます
<Image>
<Image.Source>
<Binding Path="ImageUri" >
<Binding.TargetNullValue>
<ImageSource>/Assets/PlaceHolder.png</ImageSource>
</Binding.TargetNullValue>
</Binding>
</Image.Source>
</Image>
画像に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));
}
Image
レイアウトで2つのGrid
コントロールを使用するだけで、実際には逆の方法をとることができます。1つはローカルプレースホルダーソースを使用し、もう1つはリモートBinding
を使用します。リモートバインディングがnullの場合、ローカルイメージはすでに存在します。ただし、バインディングがnullでない場合は、レンダリングされると、ローカルプレースホルダー画像が自動的にカバーされます。
<Grid>
<Image Source="Assets/Placeholder.png"/>
<Image Source="{Binding ImageUri}"/>
</Grid>
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>
TargetNullValue
属性を使用します。画像を表示したくない場合に非常に役立ちます。
あなたはこれを試すことができます:
<Image>
<Image.Source>
<Binding Path="ImageUri">
<Binding.TargetNullValue>
<BitmapImage UriSource="/ProjName;component/Assets/PlaceHolder.png" />
</Binding.TargetNullValue>
</Binding>
</Image.Source>
</Image>