在浏览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事件将不会被触发,或者因为我没有使用该事件,所以它不会产生任何问题。

据我所知,这是不可能的。 我可以用一种“选择模拟”方式实现这一点。

  1. 通过设置e.Handled = true处理PreviewKeyDown事件中combobox下拉列表上的箭头键。 因此通常的导航选择不会发生。

  2. 基于Keys的Inthese处理程序,从下拉列表中更改上一个或下一个项目的BackgroundForeground ,使其看起来好像已选中并突出显示。

  3. 然后在下拉关闭时执行选择具有“模拟选择背景 – 前景”的项目。 下拉关闭后,还原背景和前景样式。

但那仅仅是我这样做的方式。

您可以使用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事件。
这是我尝试过的,可能不是做这种情况的正确方法