2012-03-12 16 views
6

iv'e tengo varios controles de elementos que necesito adjuntar un controlador de eventos para su evento PreviewMouseLeftButtonDown solo cuando se cumple una determinada condición.Controlador de eventos dinámicamente establecido usando DataTrigger

Iv'e diseñado un estilo para mis controles con un DataTrigger, he comprobado que de fijaciones y probé con un colocador propiedad regular de para la propiedad BorderThickness sólo para ver que el DataTrigger funciona . (Lo hace ...)

¿Cómo puedo aplicar mi datatrigger para adjuntar un controlador de eventos cuando la condición del datatrigger se cumple usando un setter de eventos de la misma manera que lo haría con un setter de propiedades normal?

algo en la línea de:

 <Style TargetType="{x:Type ItemsControl}">        
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Turn}" Value="True"> 
       <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ItemsControl_MouseLeftButtonDown"></EventSetter> 
      </DataTrigger>        
     </Style.Triggers> 
    </Style> 

esta marcado lanza la excepción siguiente en la línea EventSetter:

'Set property 'System.Windows.EventSetter.Event' threw an exception.' 

excepción interna:

 {"Value cannot be null.\r\nParameter name: value"} 
+0

exactamente qué línea arroja esa excepción? ¿Es ' '? –

+0

@XiaoChuanYu

Respuesta

11

Desafortunadamente acuerdo con MSDN doc bajo Observaciones:

Tenga en cuenta que solo Style.Setters admite los objetos EventSetter. Desencadenantes (TriggerBase y derivados clases) No EventSetter apoyo

En este caso, DataTrigger se deriva de TriggerBase por lo que no se puede utilizar para configurar los controladores de eventos de forma dinámica. Una solución que puedo pensar en este momento podría ser cambiar dinámicamente los estilos según el valor de Turn.

+0

hecho pensé de registrar una propiedad de dependencia, que sería algo así como mi : MouseLeftButtonDown = "true", y utilizarlo en una incubadora no sé si podría usar propiedades de dependencia personalizadas en un setter ... –

+0

No me cabe duda de que se ajusta a su situación, pero es posible que desee consultar http://stackoverflow.com/questions/1138339/can-i-dynamically -switch-between-styles-in-wpf –

+0

es una buena idea, diseñar mal un estilo basado en el estilo que ya tengo y hacer algo así.

Cuestiones relacionadas