WPF下拉框(ComboBox)实现未展开时不能滚动选取
由于把Combobox放在在DataGrid里面,在滚动DataGrid时候,有时候会不小心滚动ComboBox,造成误操作。本来以为设置一个属性就能解决的,但它没设计这个属性。研究了几个方案,最终采用在选项改变的事件那边来处理,如果下拉框没有展开的时候,发生了选项改变改变事件,就选线还原回去。这就就避免了误操作的问题。这边有几个要注意的问题,在事件把选项还原回去前要把事件给取消掉,否者会重复触发选项改变事件,导致堆栈溢出的异常;还原后要把事件注册回来,否则事件就失效了二,在加载的数据的时候,也会触发选项改变事件,导致选项无法初始化上去。这个问题是这样处理的,在它的上下文设置一个布尔变量,在窗体的构造函数把这个值设置允许改变选项,然后再load事件中,把这个数值设置为不允许按改变选项事件,这样就成功的解决前面的问题了。很波折,不知道还有没有更好的办法
/// <summary> /// 处理下拉框没有展开的时候,滚轮滚动值误改动 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void condition_SelectionChanged(object sender, SelectionChangedEventArgs e) { var combobox = sender as ComboBox; var ab = combobox.ItemsSource; if (combobox.IsDropDownOpen == false && !Past) { combobox.SelectionChanged -= condition_SelectionChanged; if (e.RemovedItems.Count > 0 ) { count++; var s = e.RemovedItems[0] as FormulaDictionary; combobox.SelectedValue = s.Id; e.Handled = true; } else { if (e.AddedItems.Count > 0) { e.Handled = true; combobox.SelectedValue = null; e.Handled = true; } } combobox.SelectionChanged += condition_SelectionChanged; } }
标签:
WPF
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义