1. 首先继承一个listbox,来获得按住ctrl键时,点击的item

  public class ListBoxEx : ListBox
{
public BeatTemplateWave GetAnitem()
{
var obj = this.AnchorItem;
if (obj != null)
{
Type type = obj.GetType();
System.Reflection.PropertyInfo propertyInfo = type.GetProperty("Item", BindingFlags.Instance | BindingFlags.NonPublic);
System.Reflection.PropertyInfo propertyInfo2 = type.GetProperty("Index", BindingFlags.Instance| BindingFlags.NonPublic);
BeatTemplateWave value_Old = (BeatTemplateWave)propertyInfo.GetValue(obj, null); //获取属性值
return value_Old;
}
else
{
return null;
}
}
//重写选中
public void Setlist(List<BeatTemplateWave> list)
{
this.SetSelectedItems(list);
}
     
   }

2 在listbox 的调用处: 获得listbox 的选中项:SelectedItemsList

3 在mouseleftdown事件里面添加处理程序

   private void MouseLeftButtonUpHandler(ElementMouseButtonEventMerge embem)
{ ListBoxEx listbox = (embem.Sender as ListBoxEx);
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{
List<BeatTemplateWave> selectlist = new List<BeatTemplateWave>();
var obj = (embem.Sender as ListBoxNoWheelEx).GetAnitem();
if (SelectedItemsList != null)
{
var templist = SelectedItemsList.IListToCollection<BeatTemplateWave>();
if (obj != null)
{
//判断鼠标点击的项在不在选中的里面,如果不在,则加入临时集合,如果在选中项里面,则不加入临时集合,
if (templist.Any(p => p.R == obj.R))
{
foreach (BeatTemplateWave a in templist)
{
if (a.R == obj.R)
{
}
else
{
selectlist.Add(a);
}
}
}
else
{
selectlist.Add(obj);
selectlist.AddRange(templist);
}
}
else
{
selectlist.AddRange(templist);
}
listbox.Setlist(selectlist); //重新选中
SelectedItemsList = selectlist;//将临时集合赋值给选中项 重写选中
}
return;
}
else
{
if (listbox.SelectedItems != null)
{
SelectedItemsList = listbox.SelectedItems;
var item = SelectedItemsList;
if (item.Count == 0)
return; }
} }

  

wpf Listbox 实现按住ctrl键来取消选中的更多相关文章

  1. 按住ctrl键可以在新窗口打开图片

    用firebug查看网页时,img标签(或background属性里面的url地址源)里面的图片源按住ctrl键可以弹出新窗口显示,并可右键另存为到本地目录

  2. Spring Tool Suite4(sts)复制粘贴卡顿(ctrl+v, ctrl+c)、按住ctrl也很卡

    最近在看<Spring in Action, Fifth Edition>,下载了Spring Tool Suite4,在使用的过程中发现了一些问题: 只要在复制粘贴(ctrl+c, ct ...

  3. Qt 获取组合键 键盘按住某键 鼠标组合实现

    #include "mainwindow.h" #include <QDebug> #include <QKeyEvent> #include <QM ...

  4. Word中选择中内容后变成C,VMware 虚拟中Ctrl键一直被按住了

    Word中选择中内容后变成C: 解决办法:关闭金山词霸的[划词翻译]功能即可. VMware 虚拟中Ctrl键一直被按住了: 解决办法:关闭金山词霸的[取词翻译]功能即可.

  5. 鼠标上下滑动总是放大缩小页面,按住ctrl+0

    鼠标上下滑动总是放大缩小页面,可能是ctrl键失灵了,幸好键盘有两个ctrl键,按住ctrl+0,页面就正常了,吓死宝宝了,~~~~(>_<)~~~~

  6. 用AutoHotKey彻底解决“Ctrl键+鼠标滚动”时的缩放问题

    “Ctrl键+鼠标滚动”会造成代码编辑窗口的字体缩放,这是自Visual Studio 2010以来引入的一个新特性,也是一个恼人的问题,详见VS2010中尴尬的代码窗口缩放功能. 于是,每次安装Vi ...

  7. 自定义WPF ListBox的选中项样式

    首先介绍一种简单地方法:就是通过自定义SystemColors类的参数来自定义WPF ListBox选择颜色的,SystemColors的HighlightBrushKey和HighlightText ...

  8. iOS 按住Home键的代理

    1.按住home键怎么保存程序的运行状态: 监听按home键的时候程序挂起的状态(通知),然后让其重新进入程序[[NSNotificationCenter defaultCenter] addObse ...

  9. WPF ListBox数据绑定

    本文来源 http://wshoufeng1989.blog.163.com/blog/static/202047033201282911633670/  风随影动的博客 使用数据库AllData , ...

随机推荐

  1. [ES]ES查询指南

    我们通常用用_cat API检测集群是否健康. 确保9200端口号可用: curl 'localhost:9200/_cat/health?v' 绿色表示一切正常, 黄色表示所有的数据可用但是部分副本 ...

  2. 我们最常见的UX设计交付成果有哪些?

    以下内容由摹客团队翻译整理,仅供学习交流,摹客iDoc是支持智能标注和切图的产品协作设计神器. 有人会好奇,用户体验(UX)设计师每天都在做些什么呢?说实话,有很多事情!作为UX专家,需要将自己的设计 ...

  3. bootstrap 坑

    1.  表格内存出不来,也不报错 .. 值是对的..  原因是  table  中必须有属性   data-toggle="table" <table id="My ...

  4. linux下导入导出数据库

    导入导出数据库用mysqldump命令,使用方法与mysql命令类似. 导出 导出sql(包含数据和表结构):mysqldump -uroot -p dbname > dbname.sql 导出 ...

  5. 2018.11.30 bzoj3230: 相似子串(后缀数组)

    传送门 后缀数组入门题. 建立正反两个后缀数组算就行了. 代码: #include<bits/stdc++.h> #define ri register int using namespa ...

  6. PHP获取手机号

    /** * 类名: mobile * 描述: 手机信息类 * 其他: 偶然 编写 */ class mobile{ /** * 函数名称: getPhoneNumber * 函数功能: 取手机号 * ...

  7. openstack之安全组管理

    命令概览 (nova-api)[root@cc07 /]# nova help|grep secgroup add-secgroup Add a Security Group to a server. ...

  8. MFC单文档带窗体创建

    我用的vs05.先随便起个名字qwerty. 确定以后在左边最下面有一个生成的类,点击生成的类,把基类改成CFormView 最后点击完成就创建好了. 单文档的窗口不是后来创建后插入的,是在创建后就自 ...

  9. VS2012智能感知变英文解决办法

    解决办法: 1.从一台没装.NET3.5的机子上复制C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\zh-CN路径下的文件覆盖就可以 2.或者重装中文版的f ...

  10. ActiveMQ实战之 Queue点对点消息

    前言:ActiveMQ消息模式点对点编码 运行:先运行消费者在开启消息生产者即可接收到消息 消息生产者 /** * @摘要 测试发送单条数据的类 */ public class ZMQOneSendT ...