How do I bind a datatrigger in xaml to a code-defined dependency property?

c#, data-binding, datatrigger, xaml

Solution

Locally set properties always override style set properties, so you need to remove the locally set one and set the default value in your style instead:

<Rectangle Width="50" Height="50">
    <Rectangle.Style>
        <Style TargetType="Rectangle">
            <Setter Property="Fill" Value="Gray" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Active}" Value="True">
                    <Setter Property="Fill" Value="Green"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Rectangle.Style>
</Rectangle>

Problem

My code behind for a window defines a dependency property, "Active"... ``` public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } public bool Active { get { return (bool) GetValue(ActiveProperty); } set { SetValue(ActiveProperty, value); } } public static readonly DependencyProperty ActiveProperty = DependencyProperty.Register("Active", typeof(bool), typeof(MainWindow), new UIPropertyMetadata(false)); } ``` And then I bind to that property using two checkboxes in xaml. I also want to change the fill of a rectangle based on that property. How can I make this work? ``` <Window x:Class="WpfTest.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" DataContext="{Binding RelativeSource={RelativeSource Self}}"> <StackPanel> <CheckBox IsChecked="{Binding Active}" /> <CheckBox IsChecked="{Binding Active}" /> <Rectangle Fill="Gray" Width="50" Height="50"> <Rectangle.Style> <Style TargetType="Rectangle"> <Style.Triggers> <DataTrigger Binding="{Binding Active}" Value="True"> <Setter Property="Fill" Value="Green" /> </DataTrigger> </Style.Triggers> </Style> </Rectangle.Style> </Rectangle> </StackPanel> </Window> ``` Checking one box auto-checks the other, but does not change the rectangle color :(

Original source