1

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

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我看到我的问题与此处描述的问题非常相似,但我还不明白如何应用该解决方案。

4

1 回答 1

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;
    }
}

那么它只会被处理一次。

于 2012-10-18T09:48:49.823 回答