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