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;
}