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。
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
WPF MVVM TreeView 实现 右键选中 右键菜单的更多相关文章
- WPF MVVM实现TreeView
今天有点时间,做个小例子WPF MVVM 实现TreeView 只是一个思路大家可以自由扩展 文章最后给出了源码下载地址 图1 图2 模版加上了一个checkbox,选中父类的checkb ...
- 如何设置eclipse 右键new的菜单
如何设置eclipse 右键new的菜单 在使用eclipse进行开发的时候,开发人员一般使用File-new来创建项目或文件,但常常发现,默认右键new选项里很多选项极少会用到,而一些常用的选项又没 ...
- vc++ 如何添加右键弹出菜单
一.创建新工程 二.编辑菜单资源 1.添加菜单 按"Ctrl+R",双击"Menu"图标 2.于菜单编辑器内编辑菜单 四.添加代码(红色部分) void CCM ...
- win32进阶之路:程序托盘图标+右键弹出菜单
开场白 本次介绍两个非常棒且实用的技巧:程序托盘图标和右键弹出菜单,效果如下图. 程序托盘图标用了迅雷的图标,右键点击时候会弹出三个选项的菜单. 程序托盘图标设置 我会用尽可能清晰明了的步骤介绍方式 ...
- 【jQuery】smartMenu右键自定义上下文菜单插件(似web QQ)
(前端用重点整理博客地址)链接地址:http://www.cnblogs.com/atree/archive/2011/06/30/jQuery-smartMenu-javascript.html 一 ...
- 自定义鼠标右键(层叠式菜单:cascading menu)
Author:KillerLegend From:http://www.cnblogs.com/killerlegend/p/3575391.html Date:Tuesday, February 1 ...
- DirectUI界面编程(六)实现右键弹出菜单
本节向大家介绍一下右键弹出菜单是如何实现的.效果如下,在窗口中点击鼠标右键弹出菜单,点击菜单项能够响应菜单点击事件. 使用Duilib库实现的弹出菜单,实际上也是一个Windows窗口,因此我们需要创 ...
- Vue2的右键弹出菜单(vue-contextmenu)
给大家推荐一个基于Vue2的右键弹出菜单插件,支持单一SPA页面以及可以在循环绑定中使用. 项目地址为:https://github.com/chIIC/vue-...demo1: 父组件绑定右键事件 ...
- C# WPF MVVM QQ密码管家项目(8,完结篇:自动输入QQ号、密码)
原文:C# WPF MVVM QQ密码管家项目(8,完结篇:自动输入QQ号.密码) 目录: 1,界面设计 2,数据模型的建立与数据绑定 3,添加QQ数据 4,修改QQ数据 5,删除QQ数据 6,密码选 ...
随机推荐
- Windows Server2008R2中导入Excel
使用Microsoft.ACE.OLEDB对Excel进行操作: string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + & ...
- PHP手机号码归属地查询API接口
淘宝网 API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443 参数: tel:手机号码 返回:JSON ...
- html input size maxlength
最近做项目用到input的size和maxlength属性,以前只顾用没有用心去看看这2个标签的区别,今天周末baidu了一下,有所理解.特记录于此! <p>Name: <inp ...
- 用Java自定义一个定时器
1.先定义一个监听类: import java.util.Date; import java.util.Timer; import javax.servlet.ServletContextEvent; ...
- 图片和byte[]数组互转
一.图片转成byte[]数组. import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io ...
- Kotlin教程——史上最全面、最详细的学习教程,持续更新中....
关于这个系列教程,我是从最基础的开发环境搭建到项目进阶到后面的项目开发这个过程来写的.我一直秉承从实际项目开发以及源码解析的角度去写好这个教程,并让从未接触过编程的朋友能学好kotlin这门语言.所以 ...
- 160624、Spark读取数据库(Mysql)的四种方式讲解
目前Spark支持四种方式从数据库中读取数据,这里以Mysql为例进行介绍. 一.不指定查询条件 这个方式链接MySql的函数原型是: 1 def jdbc(url: String, table: S ...
- boost:property_tree::ini_parser:::read_ini 读取ini时崩溃
原因: 1 路径错误 2 配置文件中某一行缺少=,例如用// 做注释的,前面应该加";" 解决办法: 添加异常处理,实例代码如下: #include <boost/prope ...
- 指定文件夹 指定文件后缀名 删除整个文件夹 git 冲突解决 create a new repository on the command line push an existing repository from the command line
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c2 ...
- 原生js实现ajax方法
下面是一个比较完整的Ajax function ajax(){ var ajaxData = { type:arguments[0].type || "GET", url:argu ...