2016-01-24 20 views
1

我有創造更多的本身,需要(它的一種樹視圖)裏面重疊的用戶控件。我想添加一個突出顯示效果,因此我將其附加到mouseenter/mouseleave事件中,但只要將鼠標移到UC的一個子實例上,父母也會收到該事件並點亮。如何獲得MouseEnter事件觸發只在最上面的控制

我嘗試設置e.handled =真假設事件被傳誦樹從子到父,但不是這種情況下,嵌套控件的每個實例生成自己的事件。

我可以防止這種情況的一種方式是,當一個控件接收到這個事件時,它會掃描它的所有子孫和孫子(等等),看看是否有任何突出顯示,以防止自己做這件事,但我不確定重疊控件是否以特定的順序接收事件,這應該不是那麼困難。

我怎樣才能防止事件觸發,除非控制是最頂部可見一個?

+0

http://stackoverflow.com/questions/6296836/why-e-handled-true-not-working –

+0

嘿,我只是檢查,答案以任何方式幫助你? –

回答

0

樹視圖非常典型的問題。父母也被突出顯示,因爲實際上你也是通過該樹視圖TreeViewItem(從可視樹設計的角度來看)。

Please see this link 知道如何使用模板和觸發器來做到這一點。

否則我們也可以聰明,非常聰明的快捷方式將

private void TreeView_MouseEnter(object sender, MouseEventArgs e) 
    { 
     var treeItem = (e.OriginalSource as TreeViewItem); 
     foreach (var child in treeItem.Items) 
     { 
      if ((child as TreeViewItem).IsMouseOver) 
       return; 
     } 
     treeItem.Background = new SolidColorBrush(Colors.Red); 

    } 

如果事件二傳手是

<Style TargetType="{x:Type TreeViewItem}"> 
     <EventSetter Event="MouseEnter" Handler="TreeView_MouseEnter" />      
</Style> 

原因時總會觸發孩子第一次這麼抵消母公司鼠標輸入事件。 :)

另外,我們可以總是找出正確的TreeViewItem,您可以在遞歸函數中檢查子項的高亮顯示。在鼠標退出邏輯中寫入相同的邏輯。

希望這會做。

相關問題