[英]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.