2011-11-03 98 views
1

我想有條件地阻止Enter/Return鍵從ComboBox下拉列表中選中突出顯示的項目。所以我將事件處理程序連接到ComboBox.PreviewKeyDown,以便我可以設置Handled屬性,但事件處理程序從不輸入。當我使用Snoop觀看事件時,PreviewKeyDown事件會觸發其他鍵,但當按下返回鍵時它不會觸發;即使在Window級別。爲什麼不是事件發生?ComboBox PreviewKeyDown不會觸發回車鍵

編輯: ComboBox需要是可編輯的(IsEditable = true)。然後打開下拉列表。開始在列表中輸入一個項目,它應該爲你選擇它。按下返回鍵。

+1

我只是一個單一的文本框嘗試這樣一個新的項目,也沒有問題。你可以包含一些代碼嗎? –

+0

我試着用'ComboBox',它有一個'PreviewKeyDown'事件處理程序,它只是將按鍵寫入調試窗口,並且它工作正常。 – Rachel

+0

對不起,我應該先試過。試試我上面編輯的步驟。其實,我現在可能剛剛意識到了這個問題。 ComboBox的實際下拉組件是PopUp控件的權利?它有可見的鍵盤焦點,它可能有自己的視覺樹?我試圖完成的是,如果您鍵入列表中不存在的文本,我不想要Return來選擇任何內容。默認情況下它會選擇前一個匹配項。 – xr280xr

回答

0

試試這個

// prevent selecting an item when a comboboxitem is highlighted 
protected override void OnPreviewKeyDown(KeyEventArgs e) 
{ 
    if (e.Key == System.Windows.Input.Key.Enter || e.Key == System.Windows.Input.Key.Return) 
    { 
     e.Handled = true; 
    } 
    else 
    { 
     //if (base.IsDropDownOpen == false) 
     //{ 
     // base.IsDropDownOpen = true; 
     //} 
    } 

    //base.OnPreviewKeyDown(e); 
} 
+2

你會考慮添加一些敘述來解釋爲什麼這個代碼的作品,以及是什麼使它成爲問題的答案?這對詢問問題的人以及任何其他人來說非常有幫助。 –