2009-11-25 25 views
9

Tengo WPF ComboBox dentro de una plantilla de datos (una gran cantidad de cuadros combinados en el cuadro de lista) y quiero manejar el botón enter. Sería fácil si fuera, por ejemplo un botón - Usaría el comando + Ruta de enlace relativa, etc. Desafortunadamente, no tengo idea de cómo manejar la pulsación de tecla con un comando o cómo configurar el controlador de eventos desde la plantilla. ¿Alguna sugerencia?Controlador de eventos en DataTemplate

Respuesta

4

He resuelto mi problema usando un controlador de eventos habitual en el que paso por el árbol visual, encuentro el botón correspondiente y lo llamo. Si alguien más tiene el mismo problema, publique un comentario y le proporcionaré más detalles sobre la realización.

UPD

Aquí está mi solución:

que busco el árbol visual de un botón y de ejecutar el comando asociado con el botón.

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

Puede utilizar el EventSetter en el estilo que está configurando la plantilla con:

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