WPF组合框选择更改在按下Enter键时未触发

本文关键字:Enter 组合 选择 WPF | 更新日期: 2023-09-27 17:54:28

我正在使用WPF组合框并对SelectionChanged事件执行操作。我还更改了代码隐藏的集合,并且不希望触发SelectionChanged事件中的代码。因此,我使用IsDropDownOpen属性来确定下拉源是否使用代码或由应用程序的用户更改。当我使用鼠标在下拉菜单中选择值时,这可以正常工作,但是,如果我使用键盘选择值并按Enter键,则触发事件,但IsDropDownOpen属性是false。因此,我无法正确确定是否使用代码或应用程序更改了下拉选择。

代码如下:

<ComboBox SelectionChanged="Company_SelectionChanged"
DisplayMemberPath="Name"  Tag="OrgGroupId" 
ItemsSource="{Binding CompanyCollection,UpdateSourceTrigger=PropertyChanged}"
SelectedValue="{Binding SelectedCompany,UpdateSourceTrigger=PropertyChanged}"
x:Name="cmbCompany" />

修改后的选择如下:

private void Company_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (cmbCompany.IsDropDownOpen)
    {
        /*do something here*/
    }
}

我怎样才能正确地确定当下拉选择被改变使用应用程序和阻止代码执行时,它是通过代码更改?

更新

我设法通过添加IsSelectionBoxHighlighted属性检查来获得代码工作。当用户使用下拉菜单选择值时,无论使用鼠标还是键盘,该属性都会返回true。修改后的代码如下:

private void Company_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (cmbCompany.IsDropDownOpen || cmbCompany.IsSelectionBoxHighlighted)
    {
        /*do something here*/
    }
}

我在网上找不到很多关于IsSelectionBoxHighlighted属性的信息。这会导致其他错误吗?或者是否有设置/重置此属性的特定场景?

WPF组合框选择更改在按下Enter键时未触发

创建一个字段来跟踪它如何?

bool _applicationChangingDropdown = false;

在不希望触发SelectionChanged的代码开始时将其设置为true,然后将其设置为false。

然后使用

if(!_applicationChangingDropdown)
{
}