我有以下代码片段,应该创建一个树。该树的每个项目都应该在悬停时改变其背景。
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描述的问题非常相似,但我还没有理解如何应用解决方案。
答案 0 :(得分:4)
你应该在你的处理程序中检查e.Handled状态,如下所示:
private void ItemMouseEnter(object sender, MouseEventArgs e)
{
if (!e.Handled)
{
var treeViewItem = sender as TreeViewItem;
treeViewItem.Background = Brushes.LimeGreen;
e.Handled = true;
}
}
然后它只会被处理一次。