我正在使用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指令或程序集引用?)
答案 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;
这段代码会将事件附加到实际拥有事件的对象。