Controlador de eventos en DataTemplate
-
05-07-2019 - |
Pregunta
Tengo WPF ComboBox dentro de una plantilla de datos (muchos cuadros de combinación en el cuadro de lista) y quiero manejar el botón de entrada. Sería fácil si fuera por ejemplo. un botón: usaría la ruta de enlace Comando + Relativo, 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?
Solución 2
Resolví mi problema mediante el uso de un controlador de eventos habitual en el que recorre el árbol visual, encuentro el botón correspondiente y llamo el comando. Si alguien más tiene el mismo problema, publique un comentario y le proporcionaré más detalles de la realización.
UPD
Aquí está mi solución:
Busco en el árbol visual un botón y ejecuto 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);
}
}
}
}
Otros consejos
Puede usar el EventSetter en el estilo con el que está configurando la plantilla con:
<Style TargetType="{x:Type ListBoxItem}">
<EventSetter Event="MouseWheel" Handler="GroupListBox_MouseWheel" />
<Setter Property="Template" ... />
</Style>
Este artículo tiene una forma de enrutar cualquier Evento
a Command
http://nerobrain.blogspot.nl/2012/ 01 / wpf-events-to-command.html