2009-11-25 19 views
9

Ho WPF ComboBox all'interno di un modello di dati (un sacco di caselle combinate nella casella di riepilogo) e voglio gestire il pulsante di invio. Sarebbe facile se fosse ad es. un pulsante - Vorrei usare il comando + Percorso relativo del binding, ecc. Sfortunatamente, non ho idea di come sia possibile gestire la pressione del tasto con un comando o come impostare il gestore di eventi dal modello. Qualche suggerimento?Gestore eventi in DataTemplate

risposta

4

Ho risolto il mio problema utilizzando un normale gestore di eventi in cui passo attraverso l'albero visivo, trovo il pulsante corrispondente e chiamo il suo comando. Se qualcun altro ha lo stesso problema, si prega di postare un commento e fornirò maggiori dettagli di realizzazione.

UPD

Ecco la mia soluzione:

che cerco albero visuale per un pulsante e il comando associato con il tasto di eseguo.

View.xaml:

<ComboBox KeyDown="ComboBox_KeyDown"/> 
<Button Command="{Binding AddResourceCommand}"/> 

View.xaml.cs:

private void ComboBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Enter) 
    { 
     var parent = VisualTreeHelper.GetParent((DependencyObject)sender); 
     int childrenCount = VisualTreeHelper.GetChildrenCount(parent); 

     for (int i = 0; i < childrenCount; i++) 
     { 
      var child = VisualTreeHelper.GetChild(parent, i) as Button; 
      if (null != child) 
      { 
       child.Command.Execute(null); 
      } 
     } 
    } 
} 
10

È possibile utilizzare l'EventSetter nello stile che si sta impostando il modello con:

<Style TargetType="{x:Type ListBoxItem}"> 
     <EventSetter Event="MouseWheel" Handler="GroupListBox_MouseWheel" /> 
     <Setter Property="Template" ... /> 
</Style> 
Problemi correlati