具体来说,我有一个打开非模态子窗口的按钮。当主窗口打开时,主窗口中的某些东西会将焦点从子窗口中移开。
完全通用的方法是注释掉部分代码,直到问题消失。我正在寻找更快的方法。
答案 0 :(得分:24)
我正在使用Snoop来执行此操作。
对于初学者,Snoop会在状态栏中显示当前的焦点元素和当前的FocusScope。
你可以让它向你展示所有GotFocus和LostFocus事件:
同样,您可以用同样的方式跟踪FocusManager事件。
答案 1 :(得分:0)
我自己没有尝试过,所以无法确定具体步骤,但您可以尝试使用FocusManager.FocusedElement和FocusManager.GetFocusedElement Method来尝试从子窗口中找到隐藏焦点的元素。
其他有用的链接 -
焦点概述(有代码获取 重点要素): http://msdn.microsoft.com/en-us/library/aa969768.aspx#Focus_Events
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以尝试使用Runtime Flow(由我开发)在您的应用程序上下文中跟踪对System.Window.UIElement.Focus方法(在PresentationCore.dll中)的调用。
答案 4 :(得分:0)
请你提一下主要的操作(没有进入客户特定的业务 - 如果它是一个客户端项目) - 就像有任何事件挂钩到元素,任何其他操作发生在按钮点击 - 任何发生的事情显示子窗口后父窗口中的任何元素都会窃取焦点。还要检查在按钮点击事件期间发生的任何相关事件。
这些是您开始调查的一些方法。
答案 5 :(得分:0)
我刚看到一些死锁...希望这有帮助(在msdn.microwoft.com中搜索control.leave
注意 不要尝试从Enter,GotFocus,Leave,LostFocus,Validating或Validated事件处理程序中设置焦点。这样做可能会导致您的应用程序或操作系统停止响应。有关详细信息,请参阅“键盘输入参考”部分中的WM_KILLFOCUS主题,以及http://msdn.microsoft.com/library处MSDN库中“关于消息和消息队列”主题的“消息死锁”部分。