2010-08-26 6 views
15

codice Perchè non mi piace questoPerché non posso aggiungere un DataTrigger alla raccolta Trigger del mio controllo?

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

ottengo questo errore

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

Che cosa sto facendo di sbagliato aiuto plz.

risposta

31

Abe è corretto e spiega bene le limitazioni. Una cosa che si potrebbe prendere in considerazione è:

Invece di avere due stili di bordo, e cercando di scegliere tra di loro in base a un trigger ...

utilizzare un unico stile sul confine, setter di questo stile rappresentano la vostra aspetto "normale". Questo stile contiene anche la vostra DataTrigger, e la vostra DataTrigger ha una collezione di setter che rappresenta in sostanza il secondo stile (che hanno priorità superiore rispetto alle standard setter quando questo trigger restituisce true

Edit:

Qualcosa di simile questo -

<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

Sfortunatamente, solo EventTriggers può essere applicato direttamente agli elementi. Se si desidera utilizzare un Trigger o DataTrigger, devono essere in un Style, ControlTemplate o DataTemplate.

Dai nomi delle risorse, sembra che questo sia uno Border all'interno di uno ListBoxItemControlTemplate. È possibile spostare facilmente i trigger nella raccolta di trigger del modello.

Problemi correlati