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了,用你自己写的这个。
最后,上面提到的原因也不知道正确与否,哪位前辈高人看到,希望指点一二。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?