1
我有以下幾段代碼應該創建一棵樹。當它被徘徊時,該樹的每個項目都應該改變它的背景。如何防止WPF TreeView在多個項目上引發MouseEnter?
XAML:
<TreeView Name="treeView">
<TreeViewItem Header="Item 1" IsExpanded="True">
<TreeViewItem Header="Item 1.1" IsExpanded="True">
<TreeViewItem Header="Item 1.1.1"/>
<TreeViewItem Header="Item 1.1.1"/>
</TreeViewItem>
<TreeViewItem Header="Item 1.2"/>
</TreeViewItem>
</TreeView>
C#代碼隱藏:
class MainWindow : Window
{
// ...
private void SetEventHandlersOn(ItemCollection items)
{
foreach (TreeViewItem item in items)
{
item.MouseEnter += ItemMouseEnter;
item.MouseLeave += ItemMouseLeave;
SetEventHandlersOn(item.Items);
}
}
private void ItemMouseEnter(object sender, MouseEventArgs e)
{
var treeViewItem = sender as TreeViewItem;
treeViewItem.Background = Brushes.LimeGreen;
e.Handled = true;
}
private void ItemMouseLeave(object sender, MouseEventArgs e)
{
var treeViewItem = sender as TreeViewItem;
treeViewItem.Background = Brushes.White;
e.Handled = true;
}
}
而不是做什麼,我需要的樹似乎有所不同。 當我懸停一個項目時,它變得突出顯示,但其父項也出於某種原因突出顯示。
我該如何解決這個問題呢?
UPD1我看到,我的問題是非常相似的問題描述here,但我還沒有明白如何應用的解決方案。
實質上,您需要爲TreeViewItem提供IsMouseOver樣式的觸發器。這裏有一個鏈接:http://stackoverflow.com/questions/1131161/how-can-i-make-wpf-trigger-for-ismouseover-on-treeviewitem-not-affect-all-parent – Josh 2012-02-08 18:35:32
@Josh,說實話我應該說我還沒有嘗試過。我會做的。它可能有幫助。 但是你有沒有關於沒有觸發器和樣式的解決方案的想法?有趣的是,我怎樣才能防止事件發生在父項上。 – 2012-02-08 18:36:53
這只是WPF的標準行爲,雖然我不知道爲什麼。如果您進一步關注該StackOverflow鏈接並點擊第一個答案中的鏈接,您將看到您必須通過觀看PART_Header來執行更多的工作來防止多個項目上的IsMouseOver。 – Josh 2012-02-08 18:40:32