2014-09-02 97 views
1

我想創建一個行爲,其中ComboBox下拉關閉時失去焦點。 我的第一個嘗試是:WPF組合框:如何知道項目容器(何時打開)失去焦點

public class ComboBoxLostFocusBehavior : Behavior<ComboBox> { 

    protected override void OnAttached() { 
     base.OnAttached(); 

     AssociatedObject.LostFocus += (object sender, RoutedEventArgs e) => AssociatedObject.IsDropDownOpen = false; 
    } 
} 

但LostFocus事件僅僅指撥動一部分,而不是物品的容器。

我該如何參考下拉列表?

我想:當下拉列表失去焦點 - >下拉被關閉

編輯:

我認爲這個問題被誤解了。 ComboBox有兩個主要部分,它在關閉時看到的部分(讓我們稱它爲A)和下拉列表(讓它稱爲B)。 LostFocus僅指A部分。因此,在我提出的問題中,這是錯誤的,您打開下拉列表,將鼠標從A移動到B,並且當剛離開A併到達B時,B被關閉(通過行爲)。所以總結一下,LostFocus是一個錯誤的路要走,我正在尋找其他的東西來暗示下拉(B)失去了焦點。

enter image description here

+0

你的意思是什麼時候關閉下拉菜單?或者當下拉菜單關閉時?或者當下拉菜單被打開並且失去了使其關閉的焦點? – pushpraj 2014-09-02 13:11:44

+0

下拉式關閉時,我認爲它不能成爲焦點。所以,當下拉打開並失去焦點時。如何捕捉這個? – Keren 2014-09-02 13:14:09

+0

您應該使用SelectionChanged。 你需要在LostFocus上做什麼? – 2014-09-03 10:04:56

回答

0

如果我正確理解你的問題/評論你想知道如果ComboBox失去下拉打開後對焦。

您可以使用LostFocus事件的IsDropDownOpen屬性,如

protected override void OnAttached() 
    { 
     base.OnAttached(); 

     AssociatedObject.LostFocus += (s, e) => 
      { 
       if (AssociatedObject.IsDropDownOpen) 
       { 
        //dropdown is open and control is loosing focus, you may perhaps want to close it 
        AssociatedObject.IsDropDownOpen = false; 
       } 
      }; 
    } 

,或者您可以附加DropDownOpened & DropDownClosed事件和維護自己的狀態,例如

bool isDropDownOpen; 
    protected override void OnAttached() 
    { 
     base.OnAttached(); 

     AssociatedObject.DropDownOpened += (s, e) => isDropDownOpen = true; 
     AssociatedObject.DropDownClosed += (s, e) => isDropDownOpen = false; 

     AssociatedObject.LostFocus += (s, e) => 
      { 
       if (isDropDownOpen) 
       { 
        //dropdown is open and control is loosing focus, you may perhaps want to close it 
        AssociatedObject.IsDropDownOpen = false; 
       } 
      }; 
    } 

或者是使用這些事件以其他方式根據需要,例如

protected override void OnAttached() 
    { 
     base.OnAttached(); 

     AssociatedObject.DropDownClosed += (s, e) => 
      { 
       //your action on dropdown close 
      }; 
    } 
+0

我覺得這個問題在這裏被誤解了,請參閱編輯。 – Keren 2014-09-03 08:39:38

+0

我確實看到了您所做的修改。讚賞如果你也可以提供模擬相同的步驟? – pushpraj 2014-09-03 13:54:06

+0

通過步驟我的意思是如何模擬丟失的焦點在下拉列表中?這是否意味着在打開下拉菜單'B'後,點擊組合控制'A'?或者是其他東西? – pushpraj 2014-09-03 14:01:58

相關問題