6
我有一個用戶控件,其中包含多個子元素,包括複選框和文本框。防止LostFocus在兒童元素失去焦點時被觸發
我想爲我的用戶控件僅觸發LostFocus事件只有當焦點在整個用戶控件上丟失時(例如單擊用戶控件外的按鈕)。
目前,當我在用戶控件的子元素之間移動時,LostFocus事件也會觸發,例如,從一個文本框到另一個文本框。
我有一個用戶控件,其中包含多個子元素,包括複選框和文本框。防止LostFocus在兒童元素失去焦點時被觸發
我想爲我的用戶控件僅觸發LostFocus事件只有當焦點在整個用戶控件上丟失時(例如單擊用戶控件外的按鈕)。
目前,當我在用戶控件的子元素之間移動時,LostFocus事件也會觸發,例如,從一個文本框到另一個文本框。
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);
}
}
從我所看到的,沒有WPF中的ContainsFocus檢查 – binncheol
我不認爲在控件上也有一個Controls屬性。 – Ben
這不是downvoted?它看起來像是在談論winforms,而不是wpf。 – person27