TreeView.SelectItem 默认右键选中不了的。 
在普通xaml/cs模式下可以用这种方式来通过右键设置TreeView的SelectItem: private void treeview_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
        {
            var treeViewItem = e.Source as TreeViewItem;
            if (treeViewItem != null)
            {
                treeViewItem.Focus();
                e.Handled = true;
            }
        }
但是这个种方式在mvvm下不适用treeViewItem 获取到是null , e.Source实际上是TreeView本身,因为我是用ItemSource="Binding ObvList"这样的方式设置数据源。  右键获取不了TreeViewItem了  有什么解决办法没, 求指教。

解决方案 »

  1.   

    ok 自己解决了。   private void treeview_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
            {
                #region xaml/cs下右键选中方案
                //var treeViewItem = e.Source as TreeViewItem;
                //if (treeViewItem != null)
                //{
                //    treeViewItem.Focus();
                //    e.Handled = true;
                //}
                #endregion            #region mvvm模式下右键选中方案
                SelectItemByRightClickOfMvvm(treeview);
                #endregion
            } public TreeViewItem SelectItemByRightClickOfMvvm(ItemsControl source)
            {
                if (!(source is TreeView) && !(source is TreeViewItem))
                {
                    throw new ArgumentException("只支持参数为TreeView或者TreeViewItem", "source");
                }
                foreach (object item in source.Items)
                {
                    TreeViewItem currentItem = source.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem;
                    Point mousePosition = Mouse.GetPosition(currentItem);
                    Rect itemRect = VisualTreeHelper.GetDescendantBounds(currentItem);
                    // 可能是选中的项,也可能是选中项的父节点
                    if (itemRect.Contains(mousePosition))
                    {
                        // 看看是不是它的孩子被选中了,否则就是它自己被选中了              
                        if (currentItem.IsExpanded)
                        {
                            // 只判断展开的项
                            TreeViewItem selectedItem = SelectItemByRightClickOfMvvm(currentItem);
                            if (selectedItem != null)
                            {
                                selectedItem.IsSelected = true;
                                return selectedItem;
                            }
                        }
                        currentItem.IsSelected = true;                    return currentItem;
                    }
                }
                return null;
            }
    一个递归, 搞定~