如何找出 WPF 应用程序中的焦点在哪里?

2024-04-20

我的 WPF 应用程序中有一个搜索屏幕。该屏幕作为 TabControl 的 TabItem 中的 UserControl 实现。当用户切换到“搜索”选项卡时,我希望焦点进入一个特定字段。

因此,我向 Xaml 中的 UserControl 标记添加了一个 Loaded 事件处理程序,并调用了我希望在 Loaded 事件处理程序中获得初始焦点的控件的 Focus 方法。在我升级了今天使用的 Telerik 控制库之前,这一直很有效。现在,当我切换到“搜索”选项卡时,焦点不在我想要的字段中,但我无法判断哪个控件具有焦点。

由于其他原因,我想要焦点的字段已经具有 GotFocus 和 LostFocus 事件处理程序。我记得在 Win Forms 中,LostFocus 事件处理程序参数告诉您哪个控件将获得焦点。因此,我在 LostFocus 处理程序中放置了一个断点,并发现 WPF 中 LostFocus 事件处理程序的参数不包含该信息。

如果不在 UserControl 中的每个控件上放置 GotFocus 处理程序,如何确定焦点的去向?

Tony


尝试按下Tab键入并查看它是否可以帮助您找到焦点控件。

您还可以使用Snoop http://snoopwpf.codeplex.com/正如本问答中所建议的:关于调试 WPF 中的焦点问题有什么技巧吗? https://stackoverflow.com/questions/3351442/any-tips-on-debugging-focus-issues-in-wpf

对于初学者来说,Snoop 显示当前聚焦的元素和当前 状态栏中的 FocusScope。

您可以让它向您显示所有 GotFocus 和 LostFocus 事件:

1. Run your app.
2. Run Snoop.
3. Choose your app in the dropdown.
4. Click the binoculars ("Snoop") button.
5. On the right pane, click the Events tab.
6. Click to bring down the dropdown.
7. Scroll down to the Keyboard section and check GotKeyboardFocus, LostKeyboardFocus, and optionally the PreviewXXX events.
8. Now do what you need to do to manipulate focus and watch the Snoop window.

同样,您可以以相同的方式跟踪 FocusManager 事件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何找出 WPF 应用程序中的焦点在哪里? 的相关文章

随机推荐