WPF Trigger when Property and Data value are true
I need to be able to change the Style
of a control when a property and data value are true. For example, my bound data has an IsDirty
property. I would like to change the background color of my control when IsDirty
is true AND the control is selected. I found the MultiTrigger
开发者_Python百科and MultiDataTrigger
classes...but in this case I need to somehow trigger on data and property. How can I do this?
Another note: I need to be able to do this in code behind not XAML.
MultiDataTrigger works just as well for DependencyProperties as it does for ordinary properties. Just set the Path in the binding to the name of your dependency property.
You will need to be careful about setting the source of that binding though, since by default the source is the DataContext of the element to which the trigger is attached. If the trigger is used in a style on the selectable object, your can use the RelativeSource property of the Binding:
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsDirty}" Value="True" />
<Condition Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Self}}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Cyan" />
</MultiDataTrigger>
Here's how I actually did it in code-behind:
new MultiDataTrigger
{
Conditions =
{
new Condition
{
Binding = new Binding("IsDirty"),
Value = true
},
new Condition
{
Binding = new Binding("IsSelected") { RelativeSource = RelativeSource.Self },
Value = true
}
},
Setters =
{
new Setter
{
Property = Control.BackgroundProperty,
Value = Brushes.Pink
}
}
}
精彩评论