2009-11-25 3 views
9

J'ai WPF ComboBox à l'intérieur d'un modèle de données (beaucoup de comboboxes dans la zone de liste) et je veux gérer le bouton Entrée. Ce serait facile si c'était par ex. un bouton - J'utiliserais Command + Relative path path etc. Malheureusement, je n'ai aucune idée de la façon dont je peux manipuler une touche avec une commande ou comment définir un gestionnaire d'événement à partir d'un template. Des suggestions?Gestionnaire d'événements dans DataTemplate

Répondre

4

J'ai résolu mon problème en utilisant un gestionnaire d'événements habituel où je marche dans l'arborescence visuelle, trouve le bouton correspondant et appelle sa commande. Si quelqu'un d'autre a le même problème, s'il vous plaît poster un commentaire et je vais fournir plus de détails de réalisation.

UPD

Voici ma solution:

Je recherche l'arbre visuel pour un bouton et que exécuter la commande associée à bouton.

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

Vous pouvez utiliser le EventSetter dans le style que vous définissez le modèle avec:

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