在浏览arrrow键时禁用onSelectedIndex已更改的WPF下拉组合事件
当我在我的WPf DropDowncombobox中选择了一个值项目时,然后使用键导航左右箭头键导致为每个项目触发选定的已更改事件。
如何克服这个问题
我发现克服这个问题的最简单和最合适的方法如下:
而不是使用我在DropDownClosed事件中使用的SelectedIndexChanged事件,并且所有在选定索引中更早被修改的代码在检查是否选择了项目的if条件下移动到此事件。 像这样。
private void OnCmbOperatorsListDropDownClosed(object sender, EventArgs e) { if (cmbOperatorsList.SelectedIndex != -1) InsertText(cmbOperatorsList.SelectedValue.ToString()); //Do whatever u want with selected item }
因此,当我通过箭头键导航时,SelectedIndexChagned事件将不会被触发,或者因为我没有使用该事件,所以它不会产生任何问题。
据我所知,这是不可能的。 我可以用一种“选择模拟”方式实现这一点。
-
通过设置
e.Handled = true
处理PreviewKeyDown事件中combobox下拉列表上的箭头键。 因此通常的导航选择不会发生。 -
基于Keys的Inthese处理程序,从下拉列表中更改上一个或下一个项目的
Background
和Foreground
,使其看起来好像已选中并突出显示。 -
然后在下拉关闭时执行选择具有“模拟选择背景 – 前景”的项目。 下拉关闭后,还原背景和前景样式。
但那仅仅是我这样做的方式。
您可以使用PreviewKeyDown
事件
private void combo_PreviewKeyDown(object sender,KeyEventArgs e){
if (e.Key.Equals(Key.Left) || (e.Key.Equals(Key.Right))) { ((ComboBox)sender).SelectionChanged -= combo_SelectionChanged; } }
如果你想附加那个事件,你可以添加这个PreviewMouseDown
事件。
这是我尝试过的,可能不是做这种情况的正确方法