我是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... 我想让项目准确点击,我该怎么做? 谢谢!
您的事件处理程序始终接收根 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 元素,并且您将在事件处理程序中作为发送者获得正确的项目。