2014-09-10 54 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; 
    } 
}