Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当鼠标选中项目时,自动下拉组合框列表_C#_Wpf - Fatal编程技术网

C# 当鼠标选中项目时,自动下拉组合框列表

C# 当鼠标选中项目时,自动下拉组合框列表,c#,wpf,C#,Wpf,当从列表中选择特殊项时,我需要重新打开组合框列表。在这段代码中,我假设当选择一个项目时,组合列表将重新打开。如果你用键盘,它会工作,但我的鼠标有问题 private void cbPredefinedReports_SelectionChanged(object sender, SelectionChangedEventArgs e) { cbPredefinedReports.IsDropDownOpen = true;

当从列表中选择特殊项时,我需要重新打开组合框列表。在这段代码中,我假设当选择一个项目时,组合列表将重新打开。如果你用键盘,它会工作,但我的鼠标有问题

        private void cbPredefinedReports_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            cbPredefinedReports.IsDropDownOpen = true;
        }
当用户单击某个项目时,如何再次删除该列表?

也许这会有所帮助:

    <ComboBox Name="comboBox1" 
                    DropDownClosed="comboBox1_DropDownClosed" 
                    SelectionChanged="comboBox1_SelectionChanged" />

之所以需要线程,是因为无法在DropDownClosed事件中重新打开combobox,但可以在其他线程中重新打开。但是,要从另一个线程更新WPF中的controlf,需要调用Dispatcher。上面的代码正是您所要求的。

WPF没有消息队列吗?在win32中,您只需要一个简单的PostMessage。使用线程似乎很脆弱。我禁用了keepOpen=false;一切似乎都很好。一点也不脆弱,使用线程进行WPF UI更新是完全可以的,您只需要通过调度程序来完成,不能直接更新控件。这实际上是更新UI的首选方式。
    private bool keepOpen = false;
    private void comboBox1_DropDownClosed(object sender, EventArgs e)
    {
        new Thread(() =>
        {
            comboBox1.Dispatcher.Invoke(new Action(() =>
            {
                // do your IF logic here
                if (keepOpen)
                {
                    comboBox1.IsDropDownOpen = true;
                    keepOpen = false;
                }
            }), null);
        }).Start();
    }

    private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        keepOpen = true;
    }