似乎当 WPF 应用程序启动时,没有任何焦点。
这真的很奇怪。我使用过的所有其他框架都符合您的预期:将初始焦点放在 Tab 键顺序中的第一个控件上。但我已经确认它是 WPF,而不仅仅是我的应用程序 - 如果我创建一个新窗口,并在其中放入一个 TextBox,然后运行该应用程序,则 TextBox 在我单击它或按 Tab 之前没有焦点. 呸。
我的实际应用程序比文本框更复杂。我在 UserControls 中有几层 UserControls。其中一个 UserControls 具有 Focusable=”True” 和 KeyDown/KeyUp 处理程序,我希望它在我的窗口打开后立即获得焦点。不过,我仍然有点 WPF 新手,而且我没有太多运气弄清楚如何做到这一点。
如果我启动我的应用程序并按 Tab 键,然后焦点转到我的可聚焦控件,它开始按我想要的方式工作。但我不希望我的用户必须先点击 Tab 才能开始使用该窗口。
我玩过 FocusManager.FocusedElement,但我不确定将其设置在哪个控件上(顶级窗口?包含可聚焦控件的父级?可聚焦控件本身?)或将其设置为什么。
我需要做什么才能让我的深层嵌套控件在窗口打开后立即获得初始焦点?或者更好的是,将第一个可聚焦控件聚焦在 Tab 键顺序中?
我有一个绝妙的主意,那就是挖掘 Reflector 以查看 Focusable 属性的使用位置,并找到了实现此解决方案的方法。我只需要将以下代码添加到我的 Window 的构造函数中:
Loaded += (sender, e) => MoveFocus(new TraversalRequest(FocusNavigationDirection.First));
这将自动选择选项卡顺序中的第一个控件,因此它是一个通用的解决方案,应该能够被拖放到任何窗口中并且只是工作。