How do I change the Foreground color of a label in a custom button when the button is enabled or disabled?

StackOverflow https://stackoverflow.com/questions/23416650

Question

Given the following WPF Button with custom content, how do I use a Trigger to change the Foreground color of its label to blue when the button is enabled, and red when its disabled?

<Window x:Class="CustomButtonTriggerExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
            <Button IsEnabled="{Binding ElementName=chkEnabled, Path=IsChecked}">
                <StackPanel Orientation="Horizontal">
                    <Label VerticalContentAlignment="Center">This is a label control inside a button</Label>
                    <Image Height="50" Width="50" Source="/CustomButtonTriggerExample;component/Images/Some Image.png" Stretch="Fill" />
                </StackPanel>
            </Button>
            <CheckBox x:Name="chkEnabled">Button Enabled</CheckBox>
        </StackPanel>
    </Grid>
</Window>
Was it helpful?

Solution

<Window x:Class="CustomButtonTriggerExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
            <Button IsEnabled="{Binding ElementName=chkEnabled, Path=IsChecked}">
                <Button.Resources>
                    <Style TargetType="Label">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type Button}}, Path=IsEnabled}" Value="False">
                                <Setter Property="Foreground" Value="Red" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type Button}}, Path=IsEnabled}" Value="True">
                                <Setter Property="Foreground" Value="Blue"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Button.Resources>

                <StackPanel Orientation="Horizontal">
                    <Label VerticalContentAlignment="Center">This is a label control inside a button</Label>
                    <Image Height="50" Width="50" Source="/CustomButtonTriggerExample;component/Images/Some Image.png" Stretch="Fill" />
                </StackPanel>
            </Button>
            <CheckBox x:Name="chkEnabled">Button Enabled</CheckBox>
        </StackPanel>
    </Grid>
</Window>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top