zoukankan      html  css  js  c++  java
  • 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了,用你自己写的这个。

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

  • 相关阅读:
    inndo 表与存储逻辑_1
    msyql master thread
    redo log重做日志缓冲
    redo log 重做日志
    Latex 写算法伪代码
    Just for test
    ASP.NET Web API 2 OData v4教程
    MVC系统过滤器 OutputCacheAttribute
    MVC系统过滤器、自定义过滤器
    .NET如何从配置文件中获取连接字符串
  • 原文地址:https://www.cnblogs.com/LCHL/p/2480970.html
Copyright © 2011-2022 走看看