C# 如何防止WPF TreeView在多个项目上引发鼠标指针?

C# 如何防止WPF TreeView在多个项目上引发鼠标指针?,c#,wpf,treeview,mouseenter,routed-events,C#,Wpf,Treeview,Mouseenter,Routed Events,我有以下几段代码可以创建一个树。该树的每个项目在悬停时都应更改其背景 XAML: 而不是做我需要的事情,这棵树看起来不同。当我将某个项目悬停时,它会高亮显示,但由于某些原因,它的父项目也会高亮显示 我怎样才能解决这个问题 UPD1我发现我的问题与上面描述的问题非常相似,但我还不知道如何应用解决方案 您应该检查处理程序中的e.Handled状态,如下所示: private void ItemMouseEnter(object sender, MouseEventArgs e) { if (

我有以下几段代码可以创建一个树。该树的每个项目在悬停时都应更改其背景

XAML:

而不是做我需要的事情,这棵树看起来不同。当我将某个项目悬停时,它会高亮显示,但由于某些原因,它的父项目也会高亮显示

我怎样才能解决这个问题


UPD1我发现我的问题与上面描述的问题非常相似,但我还不知道如何应用解决方案

您应该检查处理程序中的e.Handled状态,如下所示:

private void ItemMouseEnter(object sender, MouseEventArgs e)
{
    if (!e.Handled)
    {
        var treeViewItem = sender as TreeViewItem;
        treeViewItem.Background = Brushes.LimeGreen;
        e.Handled = true;
    }
}

然后它将只被处理一次。

您应该检查处理程序中的e.handled状态,如下所示:

private void ItemMouseEnter(object sender, MouseEventArgs e)
{
    if (!e.Handled)
    {
        var treeViewItem = sender as TreeViewItem;
        treeViewItem.Background = Brushes.LimeGreen;
        e.Handled = true;
    }
}

然后它将只被处理一次。

基本上,您需要为TreeViewItem设置一个IsMouseOver样式的触发器。这里有一个链接:@Josh,说实话,我应该说我还没有试过。我会做的。这可能会有帮助。但是你知道没有触发器和样式的解决方案吗?有趣的是,我如何防止在父项上引发事件。这只是WPF的标准行为,尽管我不知道为什么。如果您进一步关注StackOverflow链接并单击第一个答案中的链接,您将看到您必须通过查看PART_标题来执行更多工作,以防止IsMouseOver覆盖多个项目。谢谢!这种标准行为似乎很奇怪。至少对我来说是这样。WinForms world有完全不同的游戏规则:欢迎来到WPF:。WPF有时有非常奇怪的行为,尤其是在TreeView上。它使困难的事情变得容易,而简单的事情变得困难。本质上,你需要为TreeViewItem设置一个IsMouseOver风格的触发器。这里有一个链接:@Josh,说实话,我应该说我还没有试过。我会做的。这可能会有帮助。但是你知道没有触发器和样式的解决方案吗?有趣的是,我如何防止在父项上引发事件。这只是WPF的标准行为,尽管我不知道为什么。如果您进一步关注StackOverflow链接并单击第一个答案中的链接,您将看到您必须通过查看PART_标题来执行更多工作,以防止IsMouseOver覆盖多个项目。谢谢!这种标准行为似乎很奇怪。至少对我来说是这样。WinForms world有完全不同的游戏规则:欢迎来到WPF:。WPF有时有非常奇怪的行为,尤其是在TreeView上。它使困难的事情变得容易,容易的事情变得困难。
private void ItemMouseEnter(object sender, MouseEventArgs e)
{
    if (!e.Handled)
    {
        var treeViewItem = sender as TreeViewItem;
        treeViewItem.Background = Brushes.LimeGreen;
        e.Handled = true;
    }
}