C# 在ComboBoxItem问题的click事件之后,WPF将ComboBox设置为-1索引

C# 在ComboBoxItem问题的click事件之后,WPF将ComboBox设置为-1索引,c#,.net,wpf,combobox,C#,.net,Wpf,Combobox,我有一个包含我的类别的组合框。在这个组合框中,我还有一个名为的项,它有一个单击事件。现在,让我们忘记它会打开一个新窗口或对话框窗口来添加一个新类别。。。现在,我希望无论何时选择组合框,选定的索引都更改为-1 <ComboBox x:Name="testcombo" HorizontalAlignment="Left" Margin="268,213,0,0" VerticalAlignment="Top" Width="120" Background="#FFC58383" Display

我有一个包含我的类别的组合框。在这个组合框中,我还有一个名为的项,它有一个单击事件。现在,让我们忘记它会打开一个新窗口或对话框窗口来添加一个新类别。。。现在,我希望无论何时选择组合框,选定的索引都更改为-1

<ComboBox x:Name="testcombo" HorizontalAlignment="Left" Margin="268,213,0,0" VerticalAlignment="Top" Width="120" Background="#FFC58383" DisplayMemberPath="data" SelectedValuePath="id">

                <ComboBox.ItemContainerStyle>
                    <Style TargetType="ComboBoxItem">
                        <EventSetter Event="PreviewMouseLeftButtonUp" Handler="ComboBoxItem_PreviewMouseLeftButtonUp"/>
                    </Style>
                </ComboBox.ItemContainerStyle>
</ComboBox>
和c

问题是上面的代码没有将索引更改为-1,而是在testcombo.SelectedIndex=-1行之后或之前添加了一个消息框;它的工作原理是:|

注意:我无法在组合框选择中对-1进行索引更改,因为在主项目中,我有一个keyUp事件,它通过键盘箭头向上/向下选择项目。请使用调度程序使其工作:

private void ComboBoxItem_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    var cat_obj = (sender as ComboBoxItem).Content as Modell;

    if (cat_obj.id == 0)
    {
        Dispatcher.BeginInvoke((Action)(() => { testCombo.SelectedIndex = -1; }));
        //MessageBox.Show("", "", MessageBoxButton.OK);
    }

}
另一个解决办法可以是:

private void ComboBoxItem_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    var cat_obj = (sender as ComboBoxItem).Content as Modell;

    if (cat_obj.id == 0)
    {
        testCombo.SelectedIndex = -1;
        e.Handled = true;
        testCombo.IsDropDownOpen = false;
    }
}

问题是,combobx在MouseLeftButtonUp出现后进行项目选择,因此覆盖SelectedIndex=-1;。通过Dispatcher,您可以覆盖SelectedIndex,该索引是通过鼠标单击设置的。对于第二个解决方案,e.Handled=true;combobox根本不选择该项目,但您需要手动关闭下拉列表。

谢谢@Rekshino。。。这是不是意味着活动没有足够的时间来做这件事?或者什么?。。。因为它让人困惑me@RouzbehZarandi不客气我已经更新了我的答案。从combobox中删除新类别项目并创建一个按钮New Category,创建新类别后,该按钮会将此类别添加到combobox项目中。在代码中设置索引的另一种方法是打开新类别的窗口。
private void ComboBoxItem_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    var cat_obj = (sender as ComboBoxItem).Content as Modell;

    if (cat_obj.id == 0)
    {
        testCombo.SelectedIndex = -1;
        e.Handled = true;
        testCombo.IsDropDownOpen = false;
    }
}