我正在尝试使用以下结构的应用程序使(键盘)焦点正常工作:
ItemsControl
DataTemplate for Item
ContentControl
DataTemplate for Content (multiple, depending on type)
Some container
Different controls (mainly textbox or OK button should have focus)
在每个内容模板(“某个容器”)的根目录上,我FocusManager.FocusedElement
在模板中设置了一个控件。在 ItemsControl 中的所有项目中,只有一个 ContentControls 是实际可见的(“当前”一个)。所以,基本上,我让第一件事可见,其中的 OK 按钮有焦点,用户可以按 Enter 确认。然后隐藏这个,显示下一个,并且它的主控件(例如文本框)有焦点,用户可以按回车确认(小事件处理使在文本框中回车确认项目)等等。
一切完成后,用户可以单击工具栏中的按钮重新开始,使第一个 ContentControl 再次可见。但这一次它没有焦点。我不知道谁有重点,我希望它像一开始那样工作。我试图将焦点设置到刚刚显示的 ContentControl (它有效,通过虚线可见),但它不会将焦点设置为它的孩子。由于我不知道选择了哪个数据模板(好吧,不是没有编写特殊代码),我不能只是手动设置焦点或通过绑定到孩子。也许我在这一点上错过了一件简单的事情?
另一方面,当用户手动单击活动的 ContentControl 按钮或文本框时,他可以通过 enter 确认,但 ItemsControl 似乎有焦点,而不是下一个项目。我只是无法理解这个焦点问题。有简单的解决方案吗?我是否必须编写代码来遍历 ContentControl 中的树以获得正确的数据模板?然后,我可以以某种方式关注数据模板或设置为 FocusedElement 的控件,还是必须分别为每个数据模板编写代码?