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 @ 2022-07-18 18:32  IT浪客  阅读(840)  评论(2)    收藏  举报