当子元素失去焦点时,防止LostFocus被触发

时间:2013-03-19 12:49:23

标签: c# wpf user-controls lostfocus

我有一个User Control,它有几个子元素,包括复选框和文本框。

我想在整个用户控件上丢失焦点时触发用户控件的LostFocus事件(例如,单击用户控件外部的按钮)。

目前,当我在用户控件的子元素之间移动时,LostFocus事件也会触发,例如从一个文本框到另一个文本框。

1 个答案:

答案 0 :(得分:-1)

protected override void OnLostFocus(EventArgs args)
{
      if (!ContainsFocus)
      {
          // Only do something here
      }
}

诀窍是检查ContainsFocus

在您的构造函数中,您可能必须添加类似于以下内容的代码来捕获子控件的丢失焦点(因为当他们将焦点丢失到其他位置时,您将无法直接通知)通过调用

CaptureLostFocus(this);

并实施:

void CaptureLostFocus(Control control)
{
      foreach(Control child in control.Controls)
      {
           child.LostFocus += (s, e) => OnLostFocus(e);
           CaptureLostFocus(control);
      }
}