zoukankan      html  css  js  c++  java
  • 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>
    XAML
      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

    <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
    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
  • 相关阅读:
    URL统一资源定位符的组成
    B/S与C/S的比较
    springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。
    springmvc中Controller方法的返回值
    springmvc中@RequestMapping的使用
    构造完全图---最小生成树
    poj
    叶子的颜色---经典树上dp
    花神游历各国
    CodeForces
  • 原文地址:https://www.cnblogs.com/xcong/p/3712898.html
Copyright © 2011-2022 走看看