Why can't I add a DataTrigger to my control's Triggers collection?
Abe is correct and explains the limitations well. One thing you might want to consider is:
Instead of having two border styles, and trying to pick between them based on a trigger...
Use a single style on your border, this style's setters represent your 'normal' look.This style also contains your DataTrigger, and your DataTrigger has a collection of setters which essentially represents your second style (which have higher priority than the standard setters when this trigger evaluates to true!
Edit:
Something like this -
<Style TargetType="Border" x:Key="BorderStyle"> <!-- These setters are the same as your normal style when none of your triggers are true --> <Setter Property="BorderBrush" Value="Black" /> <Style.Triggers> <DataTrigger Binding="{Binding Path=CurrentStatus}" Value="0"> <!-- These setters are the same as your ListBoxItemBorder style --> <Setter Property="BorderBrush" Value="Green" /> </DataTrigger> <DataTrigger Binding="{Binding Path=CurrentStatus}" Value="200"> <!-- These setters are the same as your ListBoxItemBorderInactive style --> <Setter Property="BorderBrush" Value="Gray" /> </DataTrigger> </Style.Triggers></Style>
Unfortunately, only EventTriggers
can be applied directly to elements. If you want to use a Trigger
or DataTrigger
, they have to be in a Style
, ControlTemplate
, or DataTemplate
.
From the resource names, it looks like this is a Border
inside a ListBoxItem
ControlTemplate
. You could easily move the triggers into the template's triggers collection.
Here is a way for no limitations triggers.
Example:
<Border Width="130" Height="100" Grid.Row="1"> <ListBox x:Name="lstItems" ItemsSource="{Binding TestItems}"> </ListBox> <tg:TriggerExtensions.Triggers> <tg:TriggerCollections> <tg:DataTriggerInfo Binding="{Binding CurrentStatus}" Value="0"> <tg:DataTriggerInfo.Setters> <tg:SetterInfo ElementName="lstItems" Property="Style" Value="{StaticResource ListBoxRed}"/> </tg:DataTriggerInfo.Setters> </tg:DataTriggerInfo> <tg:DataTriggerInfo Binding="{Binding CurrentStatus}" Value="0" IsInvert="True"> <tg:DataTriggerInfo.Setters> <tg:SetterInfo ElementName="lstItems" Property="Style" Value="{StaticResource ListBoxBlue}"/> </tg:DataTriggerInfo.Setters> </tg:DataTriggerInfo> </tg:TriggerCollections> </tg:TriggerExtensions.Triggers> </Border>
Link Sample
Link Component Github