欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

wpf Listbox 实现按住ctrl键来取消选中

程序员文章站 2022-04-28 13:20:58
1. 首先继承一个listbox,来获得按住ctrl键时,点击的item 2 在listbox 的调用处: 获得listbox 的选中项:SelectedItemsList 3 在mouseleftdown事件里面添加处理程序 ......

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; } } }