2014-09-10 88 views
3

我的問題是如何在C#(WPF)組合框中選擇ComboBoxItem時執行操作?選擇組合框時的事件

this post他們處理DropDownClosed事件,但他們不處理鍵盤選擇

所以我解釋一下我的情況:

「選擇」爲ComboBoxItems或「的SelectionChanged」組合框做的動作只有當用戶選擇不同ComboBoxItem事件,但我想,該行動執行即使用戶選擇的ComboBoxItem與ComboBoxItem已選擇的ComboBoxItem相同。

我嘗試使用「PreviewMouseLeftButtonDown」,但是如果用戶使用鍵盤選擇或者只是保持鼠標按下然後選擇,它不起作用。

在我的情況,我要打開一個窗口,當我選擇一個項目:

private void cmiCCSelect_Selected(object sender, RoutedEventArgs e) 
{ 
    cCEntityWindow.ShowDialog(); 
} 

但是,如果用戶關閉該窗口,並重新選擇相同的項目,這是行不通的。我必須選擇另一個,然後重新選擇相同的事件「選定」才能執行。

任何人都可以幫助我嗎?

+0

似乎我用'Enter'關閉了。對不起 – Noctis 2014-09-10 12:07:31

回答

1

我終於找到了答案:

你需要同時處理SelectionChanged事件和DropDownClosed這樣的:

在XAML:

<ComboBox Name="cmbSelect" SelectionChanged="ComboBox_SelectionChanged" DropDownClosed="ComboBox_DropDownClosed"> 
    <ComboBoxItem>1</ComboBoxItem> 
    <ComboBoxItem>2</ComboBoxItem> 
    <ComboBoxItem>3</ComboBoxItem> 
</ComboBox> 

在C#:

private bool handle = true; 
private void ComboBox_DropDownClosed(object sender, EventArgs e) { 
    if(handle)Handle(); 
    handle = true; 
} 

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { 
    ComboBox cmb = sender as ComboBox; 
    handle = !cmb.IsDropDownOpen; 
    Handle(); 
} 

private void Handle() { 
    switch (cmbSelect.SelectedItem.ToString().Split(new string[] { ": " }, StringSplitOptions.None).Last()) 
    { 
     case "1": 
      //Handle for the first combobox 
      break; 
     case "2": 
      //Handle for the second combobox 
      break; 
     case "3": 
      //Handle for the third combobox 
      break; 
    } 
}