C# WPF:获取一个窗口的所有子窗口,并为它们分配相同的按键事件

C# WPF:获取一个窗口的所有子窗口,并为它们分配相同的按键事件,c#,wpf,xaml,C#,Wpf,Xaml,我正在使用WPF创建一个包含各种控件(按钮、文本框等)的窗口。 现在,当窗口完成加载时,我尝试将一个KeyDown事件分配给所有控件。 很遗憾,我无法将事件分配给窗口的子项 private void OnWindowLoaded(object sender, RoutedEventArgs e) { for (var i = 0; i < VisualTreeHelper.GetChildrenCount(this); i++) { VisualTre

我正在使用WPF创建一个包含各种控件(按钮、文本框等)的窗口。 现在,当窗口完成加载时,我尝试将一个KeyDown事件分配给所有控件。 很遗憾,我无法将事件分配给窗口的子项

private void OnWindowLoaded(object sender, RoutedEventArgs e)
{
     for (var i = 0; i < VisualTreeHelper.GetChildrenCount(this); i++)
     {
         VisualTreeHelper.GetChild(this, i).KeyDown += Common_KeyDownEvent; // doesn't work

     }
}

private void Common_KeyDownEvent(object sender, System.Windows.Input.KeyEventArgs e)
{

        if (e.Key == Key.Left)
        {
            // Do stuff
        }
        if (e.Key == Key.Right)
        {
           // Do other stuff               
        }
}
WindowLoaded上的私有void(对象发送方,RoutedEventArgs e)
{
for(var i=0;i
错误:“System.Windows.DependencyObject”不包含 “KeyDown”和无扩展方法“KeyDown”的定义 找不到类型为“System.Windows.DependencyObject”的第一个参数
(是否缺少using指令或程序集引用?

尝试以下方法:

 KeyBoard.AddKeyDownHandler(VisualTreeHelper.GetChild(this, i), Common_KeyDownEvent);

这将根据需要附加事件处理程序。

请尝试以下方法:

 KeyBoard.AddKeyDownHandler(VisualTreeHelper.GetChild(this, i), Common_KeyDownEvent);

这将根据需要附加事件处理程序。

您可以执行以下操作:

if (VisualTreeHelper.GetChild(this, i) is UIElement)
  (VisualTreeHelper.GetChild(this, i) as UIElement).KeyDown += Common_KeyDownEvent;

这段代码将事件附加到实际具有事件的对象。

您可以执行以下操作:

if (VisualTreeHelper.GetChild(this, i) is UIElement)
  (VisualTreeHelper.GetChild(this, i) as UIElement).KeyDown += Common_KeyDownEvent;

这段代码将事件附加到实际具有该事件的对象。

是否有任何错误?请使用
Keyboard.AddKeyDownHandler
。您必须这样做,因为KeyDown是一个附加的事件,请查看为什么要尝试将事件处理程序添加到每个控件中?只需将事件挂接在窗口上,并让事件冒泡完成其工作。您是否收到任何错误?请使用
Keyboard.AddKeyDownHandler
。您必须这样做,因为KeyDown是一个附加的事件,请查看为什么要尝试将事件处理程序添加到每个控件中?只需将事件挂在窗口上,让事件冒泡完成它的工作。