如果窗口关闭,如何防止丢失焦点事件

时间:2015-09-18 08:33:15

标签: c# wpf focus

我编写了一个自定义的wpf usercontrol来订阅LostFocus事件。但我有问题,如果UserControl具有焦点并且包含控件的窗口将被关闭,则事件也会被触发。我不想在窗口关闭时触发事件,只有当用户通过ui元素选择带有鼠标或制表符的antoher控件时才会触发。

修改

作为重要信息,我无法访问用户控件中的Window实例。

编辑2

如果有一个解决方案不仅适用于窗口关闭,也适用于可关闭的TabItems和所有类似的东西,那将是很好的。一般来说,如果我们可以说,UserControl可见性将变为不可见。

非常感谢。

1 个答案:

答案 0 :(得分:3)

“我无法访问用户控件中的Window实例”

是的,你做了:

Window parentWindow = Window.GetWindow(userControlReference);

答案在您的UserControl.Loaded,或者您想要的任何其他地方,您需要使用上面的代码来获取对父窗口的引用,并订阅Closing事件。在事件处理程序中,只需设置一个本地属性或其他东西,告诉您的LostFocus方法不要继续执行。

请注意,您需要调用用户控件已完全加载的Window.GetWindow方法 AFTER 。您可以在用户控件的contstructor中使用它,否则它将返回null。而是使用Loaded事件或类似事件。