Change Button Background when is not enabled

Nick picture Nick · Jan 15, 2013 · Viewed 11.6k times · Source

I need to change my Button background (as SolidColorBrush for example) only when it is not enabled (IsEnabled == false).
How can I do?

Have I to modify the Button Style using the XAML or can I do this work programmatically? What is the correct XAML code, to change only the Background when it is not enabled?

I tried the following XAML code but it has no effect:

<Button>
<Button.Style>
    <Style TargetType="Button">
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Background" Value="Red"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</Button.Style>
</Button>

Answer

Eirik picture Eirik · Jan 15, 2013

You can change the background by editing the template. You'll find the default template for Button here.

In the trigger for IsEnabled you can simply add something like this:

<Setter Property="Background" Value="{StaticResource DisabledBackgroundBrush}"/>

EDIT: Try this instead then;

<Window.Resources>
    <Style TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border x:Name="Overlay" CornerRadius="2">
                        <ContentPresenter/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter TargetName="Overlay" Property="Background" Value="Red"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<StackPanel>
    <Button Content="Button" IsEnabled="False"/>
</StackPanel>

Just change it to suit your needs.