Как установить источник по умолчанию для изображения, если источник привязки равен нулю?

Я использую привязку для источника элемента управления 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. Это очень полезно, если я не хочу отображать изображение.