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