我需要让一个Panel可以在WPF中进行聚焦,这样它就像任何其他可聚焦控件一样捕获键盘事件:
KeyDown
或KeyUp
事件我在Panel上试验FocusManager.IsFocusScope="True"
,myPanel.Focus()
返回true
但仍未调用Panel KeyUp事件处理程序。
我错过了什么吗?
答案 0 :(得分:2)
经过更多调查后,Panel会对键盘进行对焦并保持按键直到按下箭头键或TAB键(这会启动焦点循环)。
我刚为KeyDown
事件添加了一个处理程序,其中`e.Handled = true;'现在一切正常。
总结一下,要有一个可专注的小组:
FocusManager.IsFocusScope="True"
添加到Panel myPanel.KeyDown += new KeyEventHandler( delegate(object sender, KeyEventArgs e) { if (e.Key == Key.Left || e.Key == Key.Up || e.Key == Key.Right || e.Key == Key.Down || e.Key == Key.Tab) e.Handled = true; } );
最后以myPanel.Focus();
为焦点。
答案 1 :(得分:1)
如果您的面板不包含任何子元素,即使使用FocusManager.IsFocusScope="True"
也不会触发GotFocus事件。面板不是设计用于键盘输入或焦点。相反,大多数时候(如果子元素是Button控件)FocusManager.IsFocusScope="True"
甚至会吃掉KeyUp / KeyDown事件。无论是你的控制还是你的小组,都不会被解雇。