码迷,mamicode.com
首页 > 其他好文 > 详细

WPF MVVM TreeView 实现 右键选中 右键菜单

时间:2014-05-07 11:11:34      阅读:1337      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   tar   ext   

1.非MVVM模式:下载源代码WpfApplication1.zip 

bubuko.com,布布扣
<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>
XAML
bubuko.com,布布扣
  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);
        }
C#

 

2.MVVM模式: 下载源代码MVVM模式.zip

1)添加引用:System.Windows.Interactivity.dll。

  添加引用→程序集→扩展。 dll

2)添加MVVMLight引用:GalaSoft.MvvmLight.Extras.WPF4.dll dll

3)添加Prism框架引用:Microsoft.Practices.Prism.dll 下载dll

bubuko.com,布布扣
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
             xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF4"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TreeView Height="200" 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" />
                    <MenuItem Header="别点我" Name="miDontClickMe"/>
                </ContextMenu>
            </TreeView.ContextMenu>
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="PreviewMouseRightButtonDown">
                    <cmd:EventToCommand Command="{Binding SelectTreeNodeCommand}" PassEventArgsToCommand="True" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </TreeView>
    </Grid>
</Window>
XAML
bubuko.com,布布扣
public class MainViewModel:NotificationObject
    {
        public ICommand SelectTreeNodeCommand { get; set; }

        public MainViewModel()
        {
            SelectTreeNodeCommand = new DelegateCommand<RoutedEventArgs>(SelectTreeNodeCommandExec);
        }

        private void SelectTreeNodeCommandExec(RoutedEventArgs e)
        {
            var treeViewItem = VisualUpwardSearch<TreeViewItem>(e.OriginalSource as DependencyObject) as TreeViewItem;

            if (treeViewItem == null) return;
            treeViewItem.Focus();
            e.Handled = true;
        }

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

    }
ViewModel

 

WPF MVVM TreeView 实现 右键选中 右键菜单,布布扣,bubuko.com

WPF MVVM TreeView 实现 右键选中 右键菜单

标签:style   blog   class   code   tar   ext   

原文地址:http://www.cnblogs.com/xcong/p/3712898.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!