WPF RelativeSource проблема с вложенными элементами управления

У меня есть следующая разметка:

<Button Name="m_SaveButton" Command="{Binding SaveCommand}">
    <StackPanel>
        <Image Source="{StaticResource IconSave16}">
            <Image.Style>
                <Style TargetType="Image">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}}" Value="False">
                            <Setter Property="Source" Value="{StaticResource IconSaveInactive16}" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Image.Style>
        </Image>
        <Label Content="Save" />
    </StackPanel>
</Button>

Я хочу изменить изображение, вложенное в кнопку, когда Button.IsEnabled имеет значение false. Разметка выше не работает.

Я пытался использовать код Мелеака, найденный здесь: WPF Mouseover Trigger Effect для дочерних элементов управления

Кто-нибудь может предложить мне решение для этого?

Заранее спасибо!

1 ответ

Решение

Вы не можете изменить локальное значение в стиле из-за значения приоритета. Это должно работать.

<Image>
    <Image.Style>
        <Style TargetType="Image">
            <Setter Property="Source" Value="{StaticResource IconSave16}" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}}" Value="False">
                    <Setter Property="Source" Value="{StaticResource IconSaveInactive16}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Image.Style>
</Image>
Другие вопросы по тегам