WPF MVVM TreeView 实现 右键选中 右键菜单
1.非MVVM模式:下载源代码WpfApplication1.zip
<TreeView Height="200" PreviewMouseRightButtonDown="TreeViewItem_PreviewMouseRightButtonDown" HorizontalAlignment="Left" Margin="12,0,0,0" Name="treeView1" VerticalAlignment="Top" Width="120"> <TreeViewItem Header="哈哈"> <TreeViewItem Header="呵呵"/> <TreeViewItem Header="嘿嘿" /> <TreeViewItem Header="哈哈哈哈" /> </TreeViewItem> <TreeViewItem Header="呵呵"> <TreeViewItem Header="呵呵呵呵" /> <TreeViewItem Header="呵呵呵呵呵呵" /> </TreeViewItem> <TreeView.ContextMenu> <ContextMenu> <MenuItem Header="点我" Name="miClickMe" Click="miClickMe_Click"/> <MenuItem Header="别点我" Name="miDontClickMe" Click="miDontClickMe_Click"/> </ContextMenu> </TreeView.ContextMenu> </TreeView>
private void TreeViewItem_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) { var treeViewItem = VisualUpwardSearch<TreeViewItem>(e.OriginalSource as DependencyObject) as TreeViewItem; if (treeViewItem != null) { treeViewItem.Focus(); e.Handled = true; } } static DependencyObject VisualUpwardSearch<T>(DependencyObject source) { while (source != null && source.GetType() != typeof(T)) source = VisualTreeHelper.GetParent(source); return source; } private void miClickMe_Click(object sender, RoutedEventArgs e) { var node = treeView1.SelectedItem as TreeViewItem; MessageBox.Show("点我" + node.Header); } private void miDontClickMe_Click(object sender, RoutedEventArgs e) { var node = treeView1.SelectedItem as TreeViewItem; MessageBox.Show("别点我" + node.Header); }