Pourquoi je ne peux pas coder comme ça
<Border Width="130" Height="70">
<Border.Triggers>
<DataTrigger Binding="{Binding Path=CurrentStatus}" Value="0">
<Setter Property="Style" Value="{StaticResource ResourceKey=ListBoxItemBorder}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=CurrentStatus}" Value="200">
<Setter Property="Style" Value="{StaticResource ResourceKey=ListBoxItemBorderInactive}"/>
</DataTrigger>
</Border.Triggers>
</Border>
Je reçois cette erreur
Failed object initialization (ISupportInitialize.EndInit).
Triggers collection members must be of type EventTrigger.
Error at object '4_T' in markup file
Qu'est-ce que je fais mal aider plz.
Abe a raison et explique bien les limitations. Une chose à considérer est:
Au lieu d'avoir deux styles de bordure et d'essayer de les choisir en fonction d'un déclencheur ...
Utilisez un seul style sur votre bordure. Les modificateurs de ce style représentent votre apparence «normale». Ce style contient également votre DataTrigger et votre DataTrigger possède une collection de paramètres qui représentent essentiellement votre deuxième style (qui ont une priorité plus élevée que les paramètres standard lorsque ce déclencheur est évalué à true!
Modifier:
Quelque chose comme ça -
<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>
Malheureusement, seule la variable EventTriggers
peut être appliquée directement aux éléments. Si vous souhaitez utiliser Trigger
ou DataTrigger
, ils doivent figurer dans Style
, ControlTemplate
ou DataTemplate
.
D'après les noms de ressources, il semble qu'il s'agisse d'une Border
dans une ListBoxItem
ControlTemplate
. Vous pouvez facilement déplacer les déclencheurs dans la collection de déclencheurs du modèle.
Voici un moyen de ne pas déclencher de limitations.
Exemple:
<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
Composant de liaison Github