wpf datatrigger на источник изображения - PullRequest
13 голосов
/ 10 марта 2010

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

Приветствия
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 Ответ

37 голосов
/ 10 марта 2010

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

  • Установите стиль TargetType = "{x: Type Image}" в стиле
  • Изменить свойство установщика на 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>

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

...