WPF:获取窗口的所有子项并为它们分配相同的KeyDown事件

时间:2016-06-16 12:11:52

标签: c# wpf xaml

我正在使用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               
        }
}

错误: &#39; System.Windows.DependencyObject&#39; 不包含     &#39; KeyDown&#39;的定义没有扩展方法&#39; KeyDown&#39;验收     类型为&#39; System.Windows.DependencyObject&#39;的第一个参数。可以找到     (您是否缺少using指令或程序集引用?)

2 个答案:

答案 0 :(得分:3)

尝试以下方法:

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

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

答案 1 :(得分:0)

您可以执行以下操作:

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

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