仅当控件通过键盘获得焦点时才绘制焦点矩形

时间:2011-03-19 19:56:35

标签: c# .net wpf xaml focus

我想设置一个TabItem的“焦点矩形”。我已经知道我可以使用FocusVisualStyle来做到这一点。问题是FocusVisualStyle creates a sepearate visual tree for an adorner that is drawn on top of the control。我使用复杂的半透明控件和阴影效果,我需要在<{1}}的某些元素下显示矩形

我在MSDN上发现我可以使用IsKeyboardFocused combined with trigger来实现我的需要。但是further research已显示this is not correct,因为:

  

键盘焦点是指当前正在接收键盘输入的元素。这并不意味着通过键盘导航设置焦点。

可能的解决方法之一可能是:

  

您可以收听key_down事件以检查是否按下了导航键。 WPF控件在内部执行此操作以显示FocusVisualStyle。

还有其他更简单的方法来实现我想要做的事情吗?我不是真的要创建代码,监听事件和处理所有这些不同的导航键和快捷方式。

1 个答案:

答案 0 :(得分:1)

默认情况下,FrameworkElement会检查最后一个输入设备在OnGotKeyboardFocus的覆盖中的内容。如果最后一个输入设备是键盘,则显示FocusVisualStyle。

您可以通过为GotKeyboardFocus事件添加处理程序并检查是否InputManager.Current.MostRecentInputDevice is KeyboardDevice来完成相同的操作。

您可能想要添加附加的依赖项属性,因此您仍然可以使用Trigger,例如IsFocusVisualVisible。如果最后一个输入设备是键盘,则在GotKeyboardFocus处理程序中将其设置为true,并在LostKeyboardFocus的处理程序中设置为false。