あなたが正しく推測したように、テンプレートとトリガーは確かにあなたの友人です。ここで
ContentControl
を使用して実装したものです:
<ContentControl Content="{Binding Path=UserAvatar}">
<ContentControl.ContentTemplate>
<DataTemplate>
<Image x:Name="image" Source="{Binding}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter TargetName="image" Property="Source" Value="--your awesome default image here--" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
や状況におけるデフォルトのブツが全くImageSource
ではありません、あなたが他のコントロールと少し周りをプレイしたい、あなたは常にVisibilty
に頼ることができるときプロパティ:
<ContentControl Content="{Binding Path=UserAvatar}">
<ContentControl.ContentTemplate>
<DataTemplate>
<Grid>
<Image x:Name="image" Source="{Binding}" />
<Canvas x:Name="defaultImage" Visibility="Collapsed" />
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter TargetName="image" Property="Visibility" Value="Collapsed" />
<Setter TargetName="defaultImage" Property="Visibility" Value="Visible" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
・ホープ、このことができます。..
1は:)それに –
私を打つしかし、どの程度UserAvatarがない場合のデフォルト画像別のContentControl? nullでないDataTriggerが必要なようです。私はちょうどカスタムValueConverterを提案するhttp://stackoverflow.com/questions/356194/wpf-datatrigger-where-value-is-not-nullを発見しました。 –
D'uh。読むことを学ぶべきである。あなたは解決策です、まさに私が探していた、Arcturusです。あなたの答えを受け入れる前に残っているポイントは1つだけです:デフォルトのアバターはImageSourceではなくキャンバスなので、Imageエレメントは何らかの形で(または非表示に)置き換えなければなりません。 –