在我的 Windows 8 Metro 项目中,我使用从 ContentControl 派生的类(我们称之为 MyControl)来展示我的内容。在 MyControl 中,我有一个 ScrollViewer。因为我希望我的控件能够处理键盘事件,所以我需要能够将焦点设置到我的控件上。但是,我还想要让滚动查看器处理键事件的选项,例如箭头键和 PageUp/Down。更准确地说,我希望这是另一个程序员可以打开或关闭的选项。这意味着有时,我希望 MyControl 成为一个制表位,有时我希望 ScrollViewer 成为一个制表位,但从不两者兼而有之。
问题是我不想将 MyControl 的内部工作原理暴露给其他程序员。也就是说,理想情况下,他们应该能够使用 MyControl.IsTabStop 并保留将实际制表位放置在我的 Control 中的逻辑(放入 MyControl 或 ScrollViewer)。
有没有什么好的方法来实现这一点,或者我是否必须通过提供一个单独的函数来解决它以使我的控件成为制表位?