【问题标题】:How to prevent lost focus event get called if window is closing如果窗口正在关闭,如何防止调用丢失焦点事件
【发布时间】:2015-09-18 08:33:14
【问题描述】:

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

编辑

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

编辑 2

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

非常感谢。

【问题讨论】:

  • 这是什么问题?
  • 如果焦点丢失,我会验证 UserControl 中的值。此验证会打开另一个窗口,如果在关闭窗口时发生这种情况,则不应该这样做。

标签: c# wpf focus


【解决方案1】:

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

是的,你这样做:

Window parentWindow = Window.GetWindow(userControlReference);

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

请记住,您需要在用户控件完全加载之后调用Window.GetWindow 方法之后。您可以在用户控件的构造函数中使用它,否则它将返回 null。而是使用 Loaded 事件或类似事件。

【讨论】:

  • 谢谢,但是问题没有很好的解释。如果有一些接近的TabItem 或类似的东西会发生什么。我试图寻找一个通用的解决方案。
猜你喜欢
  • 1970-01-01
  • 2018-03-15
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多