2

我有一个带有 Click 事件的 ContextMenu 的 TreeView。当上下文菜单中的单击事件触发时,显然我将 MenuItem 作为事件源。如何获取 TreeView 中的哪个节点是触发 ContextMenu 的节点?

4

3 回答 3

2

或者,如果您正在使用,RoutedUICommands您可以使用该OriginalSource属性ExecuteRoutedEventArgsCanExecuteRoutedEventArgs找到它的气泡开始的FrameworkElement位置。Command

然而OriginalSource,可能是内部 TextBlock,或节点的 DataTemplate 中的其他元素,因此您需要使用 VisualTreeHelper 来查找所需的父级。我已经围绕这个功能实现了一个类似于: http ://www.hardcodet.net/2008/02/find-wpf-parent /

如果您想在大型应用程序中分离/集中您的命令逻辑,这种方法很好。

于 2009-04-10T11:17:27.977 回答
2

//必须有比这更好的方法... TreeViewItem tvi = (((sender as MenuItem).Parent as ContextMenu).Parent as Popup).PlacementTarget as TreeViewItem;

这行得通,但为什么我不应该这样做呢?

于 2010-09-27T02:42:27.697 回答
1

通常,您将 TreeView 节点(例如弹出事件的源,可能是所选节点 - 在某种程度上取决于您的界面)存储在 ContextMenu 的“弹出”事件中的私有类级变量中,然后参考菜单的点击事件中的那个变量。

于 2009-04-09T19:53:57.337 回答