2012-05-24 92 views
4

我已經使用了擴展控件來創建某種滑出式面板,其中包含一些過濾選項。用戶可以選擇將該擴展器「固定」到視圖。一切都很順利,但現在我想知道當用戶點擊擴展器的某個地方時,如何讓擴展器自動關閉。我嘗試了LostFocus和其他一些活動,但無濟於事。當用戶點擊其他地方時哪個事件可以通知我?自動關閉擴展器

(就目前而言,我只是用後+封閉擴張的計時器 - 鼠標2秒後留下的擴展,但我寧願其他解決方案)

在此先感謝。

回答

7

假設你Expander被命名爲「yourExpander」你可以這樣做:

<Window PreviewMouseDown="Window_PreviewMouseDown" 

如果e.OriginalSource不是你擴展的後裔關閉擴展:

private void Window_PreviewMouseDown(object sender, MouseButtonEventArgs e) 
{ 
    Visual visual = e.OriginalSource as Visual; 

    if (!visual.IsDescendantOf(yourExpander)) 
     yourExpander.IsExpanded = false; 
} 
+0

我不得不使用e.OriginalSource而不是e.Source,否則我會始終將Window作爲源代碼(本例中是用戶控件)。我會將它標記爲答案:) 但是我仍然有一些datetimepickers和comboboxes的問題。當選擇這些控件中的值時,它們不被視爲後代,所以我的擴展器關閉。 – Dimitris

+0

爲我完美工作,謝謝 –