2010-08-26 9 views
15

código Por qué no puedo como esto¿Por qué no puedo agregar un DataTrigger a la colección Triggers de mi control?

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

me sale este error

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

¿Qué estoy haciendo mal PLZ ayuda.

Respuesta

31

Abe es correcto y explica bien las limitaciones. Una cosa es posible que desee considerar es:

En lugar de tener dos estilos de borde, y tratando de escoger entre ellos sobre la base de un disparador ...

utilizar un único estilo en su frontera, los emisores de este tipo representan su aspecto "normal". Este estilo también contiene su DataTrigger, y su DataTrigger tiene una colección de emisores que representa esencialmente el segundo estilo (que tienen mayor prioridad que los emisores de normas cuando este disparador se evalúa como verdadera

Editar:

Algo parecido esto -

<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

Desafortunadamente, solo EventTriggers se puede aplicar directamente a los elementos. Si desea utilizar un Trigger o DataTrigger, tienen que estar en un Style, ControlTemplate o DataTemplate.

De los nombres de recursos, parece que esto es Border dentro de ListBoxItemControlTemplate. Podría mover fácilmente los desencadenantes a la colección de desencadenantes de la plantilla.

Cuestiones relacionadas