簡體   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