2013-03-19 95 views
6

我有一個用戶控件,其中包含多個子元素,包括複選框和文本框。防止LostFocus在兒童元素失去焦點時被觸發

我想爲我的用戶控件僅觸發LostFocus事件只有當焦點在整個用戶控件上丟失時(例如單擊用戶控件外的按鈕)。

目前,當我在用戶控件的子元素之間移動時,LostFocus事件也會觸發,例如,從一個文本框到另一個文本框。

回答

-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); 
     } 
} 
+4

從我所看到的,沒有WPF中的ContainsFocus檢查 – binncheol

+0

我不認爲在控件上也有一個Controls屬性。 – Ben

+1

這不是downvoted?它看起來像是在談論winforms,而不是wpf。 – person27