listbox wpf 取消边框_wpf Listbox 实现按住ctrl键来取消选中

本文介绍如何在WPF中创建一个自定义ListBox,允许用户在按住Ctrl键时点击取消选中项。通过继承ListBox并重写相关方法,实现选中项的动态管理。在MouseLeftButtonUp事件中检查Ctrl键状态,根据当前点击项是否已选中来决定是否从选中项列表中移除或添加。
摘要由CSDN通过智能技术生成

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(Listlist)

{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 selectlist = new List();

var obj = (embem.Sender as ListBoxNoWheelEx).GetAnitem();

if (SelectedItemsList != null)

{

var templist = SelectedItemsList.IListToCollection();

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;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值