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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值