bin*_*eol 6 c# wpf user-controls lostfocus
我有一个用户控件,有几个子元素,包括复选框和文本框.
我想仅在整个用户控件上丢失焦点时触发我的用户控件的LostFocus事件(例如,单击用户控件外部的按钮).
目前,当我在用户控件的子元素之间移动时,LostFocus事件也会触发,例如从一个文本框移动到另一个文本框.
Jen*_*cke -1
protected override void OnLostFocus(EventArgs args)
{
if (!ContainsFocus)
{
// Only do something here
}
}
Run Code Online (Sandbox Code Playgroud)
诀窍是检查 ContainsFocus
在构造函数中,您可能必须添加类似于以下内容的代码,以通过调用来捕获子控件失去的焦点(因为当它们失去焦点到其他地方时,您不会收到直接通知)
CaptureLostFocus(this);
Run Code Online (Sandbox Code Playgroud)
并实施:
void CaptureLostFocus(Control control)
{
foreach(Control child in control.Controls)
{
child.LostFocus += (s, e) => OnLostFocus(e);
CaptureLostFocus(control);
}
}
Run Code Online (Sandbox Code Playgroud)