2012-03-12 11 views
6

iv ha diversi comandi di articoli che devo associare un gestore di eventi per il loro evento PreviewMouseLeftButtonDown solo quando viene soddisfatta una determinata condizione.Imposta dinamicamente il gestore di eventi utilizzando DataTrigger

iv'e progettato uno stile per i miei comandi con un DataTrigger, ho controllato fuori è binding e l'ho provato con un setter immobili regolare per la BorderThickness proprietà solo per vedere che la DataTrigger funziona . (Lo fa ...)

Come posso applicare il mio datatrigger per collegare un gestore di eventi quando la condizione del datatrigger viene soddisfatta utilizzando un event setter nello stesso modo in cui effettuerei un normale setter di proprietà?

qualcosa sulla falsariga di:

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

questo markup getta la seguente eccezione sulla linea EventSetter:

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

Eccezione interna:

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

esattamente quale linea genera quell'eccezione? È ' '? –

+0

@XiaoChuanYu

risposta

11

Purtroppo in base alle MSDN doc sotto Note:

notare che solo Style.Setters supporta EventSetter oggetti. Trigger (TriggerBase e derivati ​​classi) Non supporto EventSetter

In questo caso, DataTrigger è derivato da TriggerBase quindi non è possibile utilizzarla per impostare i gestori di eventi in modo dinamico. Una soluzione che posso pensare in questo momento potrebbe essere quella di cambiare dinamicamente gli stili in base al valore di Turn.

+0

Ho effettivamente pensato di registrazione di una proprietà di dipendenza, che sarebbe qualcosa come il mio: MouseLeftButtonDown = "True", e utilizzarlo in un setter Non so se potrei usare la proprietà di dipendenza personalizzata in un setter .. –

+0

Dubito che si adatti alla tua situazione ma potresti voler dare un'occhiata a http://stackoverflow.com/questions/1138339/can-i-dinamicamente -switch-between-styles-in-wpf –

+0

questa è una buona idea, progettare male uno stile basato sullo stile che ho già e fare qualcosa di simile.

Problemi correlati