TreeViewItem 上的事件,仅在根 Item 上工作

问题描述 投票:0回答:1

我是WPf的初学者,正在研究TreeView和TreeViewItem。我想将事件添加到每个 TreeViewItem。但是无论我单击 rootitem 还是 childItem,处理程序的发件人始终是根项目。 这是我的代码。

            <TreeView>
                <TreeView.ItemContainerStyle>
                    <Style TargetType="TreeViewItem">
                        <EventSetter Event="MouseRightButtonDown" Handler="TreeViewItem_MouseRightButtonDown_2"/>
                    </Style>
                </TreeView.ItemContainerStyle>
                <TreeViewItem Header="1">
                    <TreeViewItem Header="1.1"></TreeViewItem>
                    <TreeViewItem Header="1.2"></TreeViewItem>
                    <TreeViewItem Header="1.3"></TreeViewItem>
                    <TreeViewItem Header="1.4"></TreeViewItem>
                </TreeViewItem>
                <TreeViewItem Header="2">
                    <TreeViewItem Header="2.2"></TreeViewItem>
                </TreeViewItem>
                <TreeViewItem Header="3">
                    <TreeViewItem Header="2.2"></TreeViewItem>
                </TreeViewItem>
                <TreeViewItem Header="4">
                    <TreeViewItem Header="2.2"></TreeViewItem>
                </TreeViewItem>
            </TreeView>

这是处理程序

private void TreeViewItem_MouseRightButtonDown_2(object sender, MouseButtonEventArgs e)
        {
            TreeViewItem t = sender as TreeViewItem;
            MessageBox.Show(t.Header.ToString());
        }

messageBox 总是显示 1, 2, 3 ... 而不是 1.1, 1.2, 2.1... 我想让项目准确点击,我该怎么做? 谢谢!

c# wpf treeview treeviewitem
1个回答
0
投票

您的事件处理程序始终接收根 TreeViewItem 作为发送者的原因是因为您已在 TreeViewItem 样式而不是单个 TreeViewItem 元素上设置事件处理程序。这意味着事件处理程序附加到所有 TreeViewItem 元素,包括根项及其所有子项。当您单击一个子项目时,该事件向上冒泡到其父 TreeViewItem,这是根项目,这就是为什么您总是将根项目作为发件人。

要将事件处理程序仅附加到单个 TreeViewItem 元素,您需要从样式中删除事件设置器并将其显式添加到每个 TreeViewItem 元素,如下所示:

<TreeView>
    <TreeViewItem Header="1" MouseRightButtonDown="TreeViewItem_MouseRightButtonDown_2">
        <TreeViewItem Header="1.1"></TreeViewItem>
        <TreeViewItem Header="1.2"></TreeViewItem>
        <TreeViewItem Header="1.3"></TreeViewItem>
        <TreeViewItem Header="1.4"></TreeViewItem>
    </TreeViewItem>
    <TreeViewItem Header="2" MouseRightButtonDown="TreeViewItem_MouseRightButtonDown_2">
        <TreeViewItem Header="2.1"></TreeViewItem>
    </TreeViewItem>
    <TreeViewItem Header="3" MouseRightButtonDown="TreeViewItem_MouseRightButtonDown_2">
        <TreeViewItem Header="3.1"></TreeViewItem>
    </TreeViewItem>
    <TreeViewItem Header="4" MouseRightButtonDown="TreeViewItem_MouseRightButtonDown_2">
        <TreeViewItem Header="4.1"></TreeViewItem>
    </TreeViewItem>
</TreeView>

这样,事件处理程序将仅附加到您要为其处理事件的特定 TreeViewItem 元素,并且您将在事件处理程序中作为发送者获得正确的项目。

© www.soinside.com 2019 - 2024. All rights reserved.