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; } }

浙公网安备 33010602011771号