我正在编写一个使用“标签式浏览”比喻的应用程序,TabControl是窗口的完整大小,以及标签内的其他内容 . 有时这些选项卡本身包含其他TabControls .
(选项卡内的选项卡可能会令人困惑,因此我将重新设置内部TabControl的样式,因此它看起来不像TabControl . 我可能会将其设置为使用顶部的ToggleButtons而非标签 . )
我希望这个UI的行为就像你期望选项卡式浏览隐喻一样:Ctrl Tab应该总是切换外部TabControl(看起来像TabControl的那个)上的标签,即使键盘焦点位于内部TabControl内部(也不是't look like a TabControl, and therefore shouldn' t应该响应Ctrl Tab) . 但是,当然,内部TabControl首先获取键事件并自行处理它 .
保持内部TabControl不响应Ctrl Tab和Ctrl Shift Tab键事件的最佳方法是什么,这些事件可以冒泡到外部TabControl?
3 回答
WPF TabControl似乎通过OnKeyDown方法管理键盘导航功能 . 我建议创建一个继承自TabControl的自定义控件,并覆盖OnKeyDown方法 .
您可以在内部TabControl上处理PreviewKeyDown事件,并设置e.Handled = true以防止它处理关键事件 . 然后,您可以找到父TabControl(可能递归通过((TabControl)发送者).Parent)并以编程方式更改其SelectedIndex .
将其包装在自定义控件中将使其保持合理清洁 .
作为建议here创建自定义控件的替代方法,您可以创建一个"Attached behaviour"来封装它:
像这样在XAML中使用: