Как установить источник по умолчанию для изображения, если источник привязки равен нулю?
Я использую привязку для источника элемента управления Image
.
<Image Source="{Binding ImageUri}"/>
Но этот ImageUri
может быть нулевым, поэтому для этого я хочу использовать образ по умолчанию, держатель места, который может быть в /Assets/PlaceHolder.png
, например.
Как установить образ по умолчанию? Благодарю.
(Это приложение WP8, но не должно отличаться от WPF)
Ответы
Ответ 1
Вы можете достичь этого, установив TargetNullValue
<Image>
<Image.Source>
<Binding Path="ImageUri" >
<Binding.TargetNullValue>
<ImageSource>/Assets/PlaceHolder.png</ImageSource>
</Binding.TargetNullValue>
</Binding>
</Image.Source>
</Image>
Ответ 2
Вы можете установить событие ImageFailed на свое изображение,
<Image Source="{Binding ImageUri}" ImageFailed="Image_ImageFailed"/>
и используйте следующий С# для загрузки определенного изображения на свое место.
private void Image_ImageFailed(object sender, ExceptionRoutedEventArgs e)
{
((Image)sender).Source = new BitmapImage(new Uri("/Assets/MyDefaultImage.png", UriKind.Relative));
}
Ответ 3
На самом деле вы можете пойти по другому пути, на мой взгляд, просто используя два элемента Image
в макете Grid
, один с локальным источником-заполнителем и один с удаленным Binding
. Локальный образ уже существует, когда ваше удаленное связывание имеет значение null. Однако, если привязка не является нулевой, она автоматически покрывает изображение локального заполнителя после его рендеринга.
<Grid>
<Image Source="Assets/Placeholder.png"/>
<Image Source="{Binding ImageUri}"/>
</Grid>
Ответ 4
Вы можете использовать событие 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>
Ответ 5
используйте атрибут TargetNullValue
. Это очень полезно, если я не хочу отображать изображение.
Ответ 6
Здесь вы должны попробовать играть с FallBackValue
. Эти две ссылки должны предоставить дополнительную помощь
Связывание WPF - значение по умолчанию для пустой строки
MSDN