禁用通过箭头键导航时WPF下拉组合的onselecteindex更改事件
本文关键字:组合 onselecteindex 事件 WPF 导航 | 更新日期: 2023-09-27 18:06:13
当我在WPf下拉组合框中选择了一个值项时,使用左箭头键和右箭头键导航会导致为每个项触发选定的更改事件。
如何克服这个问题
我发现克服这个问题最简单、最合适的方法如下:
而不是使用我在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事件中组合框下拉框上的箭头键。这样通常的基于导航的选择就不会发生了 -
在这些基于键的处理程序中,从下拉列表中更改前一项或下一项的
Background
和Foreground
,使其看起来好像已选中并突出显示。 -
当下拉菜单关闭时,选择当前具有"模拟选择背景-前景"的项目。下拉菜单关闭后,恢复背景和前景样式
您可以使用PreviewKeyDown
事件
私有void combo_PreviewKeyDown(对象发送者,KeyEventArgs e){
if (e.Key.Equals(Key.Left) || (e.Key.Equals(Key.Right))) { ((ComboBox)sender).SelectionChanged -= combo_SelectionChanged; } }
如果你想附加这个事件,你可以添加这个PreviewMouseDown
事件。
这是我尝试过的,可能不是处理这种情况的正确方法