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 に答える