博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ListBox禁止默认的上下快捷键
阅读量:4577 次
发布时间:2019-06-08

本文共 963 字,大约阅读时间需要 3 分钟。

写了一个简单的播放器,把上下键设置为音量的快捷键,但是按下这两个键的时候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了,用你自己写的这个。

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

转载于:https://www.cnblogs.com/LCHL/archive/2012/05/03/2480970.html

你可能感兴趣的文章
vSphere的exsi root密码忘记了
查看>>
svn的安装过程
查看>>
pure的bug记录2
查看>>
NSCopying简析
查看>>
python抓取51CTO博客的推荐博客的全部博文,对标题分词存入mongodb中
查看>>
oracle 用户 角色 权限
查看>>
P2083 找人
查看>>
MySQL 分区知识点(三)
查看>>
使用pipreqs生成项目依赖
查看>>
android 二维码生成
查看>>
sql server2008 R2安装总结
查看>>
linux命令行快捷键
查看>>
怎么拿到url地址?后的某个参数值
查看>>
android中如何在代码中直接设置View的layout_weight属性
查看>>
hdu 1853 Cyclic Tour(费用流OR二分图最佳匹配,5级)
查看>>
js 对url进行某个参数的删除,并返回url
查看>>
Windows7装Linux虚拟机
查看>>
SQL 操作结果集 -并集、差集、交集、结果集排序
查看>>
linux上搭建nginx+php+mysql环境详细讲解
查看>>
RemoveDuplicatesFromSortedArrayI II,移除有序数组里的重复元素以及移除数组里的某个元素...
查看>>