繁体   English   中英

在按下Enter键时未触发WPF组合框SelectionChanged

[英]WPF Combobox SelectionChanged not fired on Enter key down

我正在使用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属性上找不到很多信息。 这会导致其他错误吗? 或设置/重置此属性时,是否有任何特定情况?

如何创建一个自己跟踪的字段。

bool _applicationChangingDropdown = false;

在您不想触发SelectionChanged的任何代码开始时将其设置为true,之后将其设置为false。

然后使用

if(!_applicationChangingDropdown)
{
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM