我的问题是如何在C#(WPF)的ComboBox中选择ComboBoxItem时执行操作?
在this post中,他们处理DropDownClosed事件,但他们没有处理键盘选择。
所以我解释一下我的情况:
ComboBoxItems的“Selected”事件或ComboBox的“SelectionChanged”事件仅在用户选择不同的ComboBoxItem时执行操作,但我希望即使用户选择的ComboBoxItem是相同的,也要执行该操作已经选择了ComboBoxItem。
我尝试使用“PreviewMouseLeftButtonDown”,但是如果用户选择键盘或只是按住鼠标然后选择,则它不起作用。
在我的情况下,当我选择一个项目时我必须打开一个窗口:
private void cmiCCSelect_Selected(object sender, RoutedEventArgs e)
{
cCEntityWindow.ShowDialog();
}
但是如果用户关闭此窗口并重新选择相同的项目,则它不起作用。我必须选择另一个,然后重新选择相同的事件“选定”可以执行。
有人能帮助我吗?
答案 0 :(得分: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;
}
}