我编写了一个自定义的wpf usercontrol来订阅LostFocus
事件。但我有问题,如果UserControl
具有焦点并且包含控件的窗口将被关闭,则事件也会被触发。我不想在窗口关闭时触发事件,只有当用户通过ui元素选择带有鼠标或制表符的antoher控件时才会触发。
修改
作为重要信息,我无法访问用户控件中的Window
实例。
编辑2
如果有一个解决方案不仅适用于窗口关闭,也适用于可关闭的TabItems和所有类似的东西,那将是很好的。一般来说,如果我们可以说,UserControl
可见性将变为不可见。
非常感谢。
答案 0 :(得分:3)
“我无法访问用户控件中的Window实例”
是的,你做了:
Window parentWindow = Window.GetWindow(userControlReference);
答案在您的UserControl.Loaded
,或者您想要的任何其他地方,您需要使用上面的代码来获取对父窗口的引用,并订阅Closing
事件。在事件处理程序中,只需设置一个本地属性或其他东西,告诉您的LostFocus
方法不要继续执行。
请注意,您需要调用用户控件已完全加载的Window.GetWindow
方法 AFTER 。您可以不在用户控件的contstructor中使用它,否则它将返回null。而是使用Loaded
事件或类似事件。