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. mysql 清空所有表数据重置自增ID

    1.登录mysql客户端 mysql -u root -p 输入密码进入 2.生成 sql 语句文件 SELECT CONCAT('TRUNCATE TABLE ',TABLE_NAME,';') i ...

  2. vue 浏览器页面刷新时执行一段代码

    当刷新(浏览器刷新)页面的时候,重置到首页(或其他页面)纯js的是window.onload()但是vue几乎不会用到这个,vue所有的是生命周期那么我们可以根据生命周期来实现这个beforeCrea ...

  3. 数据结构和Java集合

    list接口,可重复,有序的.list有arrayList,因为是数组结构,适合用在数据的查询,linkedList,因为是链表结构,适合用在增删操作.数组如果增删的话,需要后面的元素都往前或者往后移 ...

  4. Elastix 安装G729 G723语音编码

    下載適合自己機器及軟體版本的模組檔,基本上略分為 pentium/pentium2/pentium3/x86_64,Asterisk 1.2/1.4/1.6.前往 http://asterisk.ho ...

  5. 使用xtrabackup备份innodb引擎的数据库

    innodb引擎的数据库可以使用mysqldump备份,如果表很大几十个G甚至上百G,显示用mysqldump备份会非常慢.然后使用xtrabackup 可以很快的在线备份innodb数据库.Inno ...

  6. 2018.12.15 spoj Substrings(后缀自动机)

    传送门 后缀自动机基础题. 求长度为iii的子串出现次数的最大值. 对原串建出samsamsam,然后用sizsizsiz更新每个maxlenmaxlenmaxlen的答案. 然后由于后缀链接将其转化 ...

  7. 2018.10.24 NOIP模拟 小 C 的序列(链表+数论)

    传送门 考虑到a[l],gcd(a[l],a[l+1]),gcd(a[l],a[l+1],a[l+2])....gcd(a[l]...a[r])a[l],gcd(a[l],a[l+1]),gcd(a[ ...

  8. CAS 界面根据不同的域名显示不同的界面

    概要 在实际需求中,客户想通过不同的域名显示不同的登录界面,比如输入 manage.aps.cn 显示运维管理登录,business.aps.cn 显示业务管理登录. 实现方法 1.准备两套登录UI ...

  9. react组件父传子

    react组件父传子,子组件使用父组件的数据,用props import React, { Component } from 'react'; class App extends Component ...

  10. pageshow和pagehide事件

    Firefox和opera有一个特性,往返缓存:可以在用户使用浏览器的后退和前进按钮时加快页面的转换速度,这个缓存不仅保存了页面的数据,还有DOM和JavaScript的状态. 为了更形象的说明bfc ...