zoukankan      html  css  js  c++  java
  • wpf Listbox 实现按住ctrl键来取消选中

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

      

  • 相关阅读:
    Linux下的vim简易配置与Windows下的vim配置
    ASP.NET MVC2(Visual Studio.NET 2010)学习之路(一)
    NonSQL
    完成公司核名
    调试iOS 已经发布代码 Crash 文件分析出出错对应代码
    iOS RSA公钥加密数据 服务端接受PHP私钥解密 反过服务端公钥加密数据 iOS端私钥解密数据
    iOS 日期格式串 setDateFormat 显示格式代码
    iOS5 UI 设计新手段 Storyboard
    UIEdgeInsets
    xcode调试找出错误行
  • 原文地址:https://www.cnblogs.com/gisbeginner/p/10096906.html
Copyright © 2011-2022 走看看