2010-08-26 15 views
15

Warum kann Code, den ich wie dieseWarum kann ich der Trigger-Sammlung meines Steuerelements keinen DataTrigger hinzufügen?

<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> 

Ich erhalte diesen Fehler

Failed object initialization (ISupportInitialize.EndInit). 
Triggers collection members must be of type EventTrigger. 
Error at object '4_T' in markup file 

Was mache ich falsch plz help tun.

Antwort

31

Abe ist richtig und erklärt die Einschränkungen gut. Eine Sache, die Sie wollen vielleicht prüfen ist:

Statt zwei Stile Grenze zu haben, und versuchen, zwischen ihnen basierend auf einem Auslöser zu holen ...

Verwenden Sie einen einzigen Stil auf dem Rand, der dies Setter Stil repräsentieren Ihre "normales" Aussehen. Dieser Stil enthält auch Ihre Datatrigger und Ihre Datatrigger hat eine Sammlung von Setter, die im Wesentlichen Ihre zweite Art darstellt (die eine höhere Priorität als die Standardsetzer haben, wenn dieser Trigger true ergibt

bearbeiten:

So etwas wie dies -

<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> 
18

Leider kann nur EventTriggers direkt auf Elemente angewendet werden. Wenn Sie eine Trigger oder DataTrigger verwenden möchten, müssen sie in einer Style, ControlTemplate oder DataTemplate sein.

Von den Ressourcennamen sieht es so aus, als wäre dies ein Border innerhalb eines ListBoxItemControlTemplate. Sie können die Trigger einfach in die Trigger-Sammlung der Vorlage verschieben.

Verwandte Themen