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;
            }
        }
复制代码

 

posted @   IT浪客  阅读(775)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示