Wpf datatrigger на источнике изображения

Предполагая, что привязка правильная, и файлы изображений находятся там, где они были, может ли кто-нибудь понять, почему изображение в xaml ниже не изменится, когда триггер оценит значение true?

Cheers,
Berryl

            <Image Source="..\..\Images\OK.png" Grid.Column="2" Stretch="None">
                <Image.Style>
                    <Style>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding TimeSheet, Converter={StaticResource overQuotaConv}}" Value="True">
                                <Setter Property="Image.Source" Value="..\..\Images\Error.png"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Image.Style>
            </Image>

Ответ 1

Попробуйте следующее...

  • Задайте TargetType = "{x: Тип изображения}" в стиле
  • Измените свойство setter на Property = "Source"

Способ определения пути к свойствам в настоящее время, он ищет свойство в Image под названием Image (которое не существует), а затем внутри того, что называется Source.

Кроме того, удалите атрибут Source из тега Image вверху. Это будет отменять все, что применяется стилем. Вы можете перенести его в другой DataTrigger, или вы можете поместить его в обычный сеттер, например:

<Image Grid.Column="2" Stretch="None">
    <Image.Style>
        <Style TargetType="{x:Type Image}">
            <Setter Property="Source" Value="..\..\Images\OK.png" />
            <Style.Triggers>
                <DataTrigger Value="True" Binding="{Binding TimeSheet, Converter={StaticResource overQuotaConv}}">
                    <Setter Property="Source" Value="..\..\Images\Error.png"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Image.Style>
</Image>

Ваше время интересно. Я как раз собираюсь опубликовать что-то в своем блоге об элементе управления, который делает что-то очень похожее на это, но в гораздо более сжатом синтаксисе.