• ListBox禁止默认的上下快捷键


    写了一个简单的播放器,把上下键设置为音量的快捷键,但是按下这两个键的时候Listbox的选择项也会发生改变(如果listbox中没有选中任何一项的话则不会更改。)

    于是就想办法把这个keyDowm事件给搞掉,百度了都是给重新处理keyDowm事件,没有达到想要的效果。

    这里的关键在于KeyDowm中的e.Handled:bool 获取或设置一个值,指示路由事件的处理状态(详细的说明自己用vs看)。

    但是,我们在listbox中加入KeyDowm事件,设置e.Handled=true,这是没有效果的,按上下键他该干嘛还是干嘛。

    这里的原因我自己觉得大概是这么回事:

      这个listbox“天生”就有使用“上”、“下”(其他的键没试过,不知道有没有哈)的本事,你在代码中给他加一个KeyDowm处理事件,当我按下“上/下”键的时候,他就先使用了他的天生本事,然后再执行你在事件中让他做的事情,所以,人家本事都使出来了,这时候你再设置再告诉人家,这个KeyDowm事件不用做了,这还有意义么?

    基于上面的想法,我就想到了给listbox创造一个儿子(至于为什么不是女儿……),把listbox的本事给改造一下再传给他儿子。于是,请看下面代码(哈哈,代码就几句却被我扯了这么多,我真佩服我自己!):

    好了,下面我们解决问题,新建一个类,继承System.Windows.Controls.ListBox

    public class ListBox : System.Windows.Controls.ListBox
    {

      //这里把KeyDowm事件给设置为已处理。你在页面中在添加KeyDowm事件,它是不认账的了,就比如说:你都做了那我还用做?

      protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e)
      {
        e.Handled = true;
      }
    }

    然后,在页面中就不要用系统的listbox了,用你自己写的这个。

    最后,上面提到的原因也不知道正确与否,哪位前辈高人看到,希望指点一二。

  • 相关阅读:
    多进程通信之管道运用
    多线程信号量的运用
    多线程的互斥锁的运用
    linux中模糊查找文件
    python练习实例
    出现警告“user1 不在 sudoers 文件中。此事将被报告。”
    linux下添加删除,修改,查看用户和用户组
    makefile实例
    shutil.copy()、os.walk()、os.rename()实例
    socket网络编程
  • 原文地址:https://www.cnblogs.com/LCHL/p/2480970.html
Copyright © 2020-2023  润新知