WPF TreeView 右键菜单选中

   xaml代码:

       <TreeView Grid.Row="0" Height="401" HorizontalAlignment="Left" Margin="12,0,0,0" Name="treeView1" VerticalAlignment="Top" Width="182">
            <TreeViewItem Header="哈哈"   >
                <TreeViewItem Header="呵呵"/>
                <TreeViewItem Header="嘿嘿" />
                <TreeViewItem Header="哈哈哈哈"   />
            </TreeViewItem>
            <TreeViewItem Header="呵呵0">
                <TreeViewItem Header="呵呵呵呵1"  />
                <TreeViewItem Header="呵呵呵呵呵呵2"  />
            </TreeViewItem>
            <TreeView.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="点我" Name="miClickMe" />
                    <MenuItem Header="别点我" Name="miDontClickMe"/>
                </ContextMenu>
            </TreeView.ContextMenu>
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseMove">
                    <i:InvokeCommandAction Command="{Binding SelectTreeNodeCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=local:Window1}}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </TreeView>

ViewModel代码:

  public ICommand SelectTreeNodeCommand
        {
            get
            {
                return new DelegateCommand<object>((x) =>
                {
                    if (x == null) { return; }
                    (x as Window1).MouseRightButtonDown +=  ViewModel_MouseRightButtonDown;
                });
            }
        }

        private void  ViewModel_MouseRightButtonDown(object sender, RoutedEventArgs e)
        {
            var treeViewItem = VisualUpwardSearch<TreeViewItem>(e.OriginalSource as DependencyObject) as TreeViewItem;
            if (treeViewItem != null)
            {
                treeViewItem.Focus();
            }
        }

        private static DependencyObject VisualUpwardSearch<M>(DependencyObject source)
        {
            while (source != null && source.GetType() != typeof(M))
            {
                if (source is System.Windows.Media.Visual || source is System.Windows.Media.Media3D.Visual3D)
                    source = System.Windows.Media.VisualTreeHelper.GetParent(source);
                else
                    source = LogicalTreeHelper.GetParent(source);
            }
            return source;
        }

参考链接:

https://www.cnblogs.com/xcong/p/3712898.html

猜你喜欢

转载自blog.csdn.net/m0_38000974/article/details/87915958