DataTrigger not firing

John picture John · Oct 28, 2009 · Viewed 7.9k times · Source

I have the following xaml:

    <DockPanel>
    <DockPanel>
        <CheckBox IsChecked="{Binding Path=Test}" />
        <CheckBox IsChecked="{Binding Path=Test}" />
    </DockPanel>
    <DockPanel DockPanel.Dock="Left" Width="10" Background="Blue">
        <DockPanel.Style>
            <Style>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=Test}" Value="True">
                        <Setter Property="DockPanel.Background" Value="Yellow" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DockPanel.Style>
    </DockPanel>
</DockPanel>

Now - the 2 checkboxes link properly - checking one will check the other - but the datatrigger is not firing at all.

What am I doing wrong?

Answer

Andrew Shepherd picture Andrew Shepherd · Oct 28, 2009

The issue here is Property Value Precedence.

You are currently setting the Background to blue directly on the DockPanel. This explicit property will override any value set by the trigger.

Instead, you must set the original "Background" as a setter in the style.

<DockPanel DockPanel.Dock="Left" Width="10">
    <DockPanel.Style>
        <Style>  
            <Setter Property="DockPanel.Background" Value="Blue" /> 
            <Style.Triggers>                    
                <DataTrigger Binding="{Binding Path=Test}" Value="True">                        
                    <Setter Property="DockPanel.Background" Value="Yellow" />                       
                </DataTrigger>
            </Style.Triggers>            
        </Style>        
    </DockPanel.Style>    
</DockPanel></DockPanel>