我在为特定的 TreeViewItem 指定 ContextMenu 时遇到了一点问题:
<TreeView x:Name="_filesTree">
<TreeView.Resources>
<ContextMenu x:Key="_rootContextMenu">
<MenuItem Header="Add..." Click="MenuItem_Click" />
</ContextMenu>
</TreeView.Resources>
<TreeViewItem Header="Persistent" ContextMenu="{DynamicResource _rootContextMenu}"/>
<TreeViewItem Header="Temporary" ContextMenu="{DynamicResource _rootContextMenu}" />
</TreeView>
点击处理程序:
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
Point menuClickPoint = ((sender as FrameworkElement).Parent as ContextMenu).TranslatePoint(new Point(0, 0), _filesTree);
DependencyObject obj = _filesTree.InputHitTest(menuClickPoint) as DependencyObject;
while (obj != null && !(obj is TreeViewItem))
{
obj = VisualTreeHelper.GetParent(obj);
}
(obj as TreeViewItem).Items.Add("(new)");
}
在我的 *MenuItem_Click* 事件处理程序中,我将新的 TreeViewItems 添加到单击的项目中,效果很好。但是在添加新的(例如到“持久”子树)之后,右键单击这个新子项会再次打开上下文菜单。这是我不需要的东西,因为我需要这些新添加的项目的另一个上下文菜单(带有删除选项)。如何实现上下文菜单仅在右键单击根项(TextBlock)而不是在子树内时打开?
谢谢