Различные изображения для включения и выключения состояний кнопки в WPF

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

<Button CommandParameter="Open" >
    <StackPanel Orientation="Horizontal" >
        <Image Source="../icons/big/open.png" Width="20" Height="20"></Image>
    </StackPanel>
</Button>

Спасибо.

Ответ 1

Вы можете использовать стиль с такими триггерами:

<Style TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <StackPanel Orientation="Horizontal" >
                    <Image Name="PART_Image" Source="path to normal image" />
                </StackPanel>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Source" Value="path to mouse over image" TargetName="PART_Image"/>
                    </Trigger>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="Source" Value="path to pressed image" TargetName="PART_Image"/>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="Source" Value="path to disabled image" TargetName="PART_Image"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Ответ 2

Я использовал следующий код, чтобы изображения внутри кнопок имели половину непрозрачности, когда кнопка отключена, и она отлично работает!

<Style TargetType="Button">
    <Style.Resources>
        <Style TargetType="Image">
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Opacity" Value="0.5" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Style.Resources>
</Style>

Ответ 3

Попробуйте использовать Style.Triggers см. сообщение wpf-style-trigger

Ответ 4

В принципе, создайте стиль для кнопки, которая заставляет его отображать объект изображения в свойстве содержимого, а затем имеет триггер, который проверяет состояние разрешенных кнопок, и когда он имеет значение ИСТИНА, это будет одно изображение, а вообще-то другое время будет другим изображением.