CheckComboBox:如何在单击选择后阻止combobox关闭?

我有一个combobox,它上面有一堆复选框。 我希望用户能够在combobox关闭之前多次单击(或由用户自己关闭)。 现在的问题是,每次单击复选框时,combobox都会关闭,迫使想要选择多个选项的用户多次重新打开它。

我在同一主题上找到了其他问题,但这些问题适用于Silverlight,Qt等比较标签。

我已经尝试过设置StayOpenOnEdit,但这并不能解决问题。 据我所知,没有财产可以解决我的问题。 这让人怀疑我可能会把错误的组件放在一起。

  1. 单击复选框后,如何防止combobox自动关闭?
  2. 是否有更适合此类任务的组件,如果有,它的名称是什么?

请注意,即使#2的答案是“是”,我仍然对纯粹的学术原因感到好奇。

正如有人在post中建议的那样,我玩过切换按钮和列表框。 然而,这导致了一个总是完全显示的所有复选框的列表,其后面有一些灰色的东西(我假设是切换器)。 也许我在标记中做了一些不那么聪明的事情。

      

关键是要实现这样的东西,但它需要是一个标准的WPF控件(所有选定项目的连接线很好,但不是必须的)。 此外,我已经阅读了关于绑定和处理尚未完全开发的抱怨,我感到有点怀疑。

使用Exapander Control,您可以在单次选择后无需关闭弹出窗口即可实现多项目选择。

为了便于理解,请单独运行此代码。

XAML

                                                                      

c#代码

  public partial class Window1 : Window { public Window1() { InitializeComponent(); ObservableCollection custdata = new ObservableCollection(); custdata.Add(new Customer() { ContentData = "content1" }); custdata.Add(new Customer() { ContentData = "content2" }); custdata.Add(new Customer() { ContentData = "content3" }); custdata.Add(new Customer() { ContentData = "content4" }); custdata.Add(new Customer() { ContentData = "content5" }); custdata.Add(new Customer() { ContentData = "content6" }); lst.ItemsSource = custdata; } } public class Customer { public string ContentData { get; set; } } 

结果

在此处输入图像描述

康拉德,

我也决定以这种方式使用ComboBox,因为代码很简单。 我发现保持ComboBox弹出窗口打开的最简单方法是连接到ComboBox项目模板中控件的PreviewMouseDown事件。 自己处理行为,然后标记处理的鼠标事件。 对我很有用。 在下面的示例中,FilterItems中的每个对象都是一个带有Text属性和IsChecked属性的简单视图模型。

        

然后我的事件处理程序是:

 private void FilterComboBox_PreviewMouseDown(object sender, MouseButtonEventArgs e) { var cb = sender as CheckBox; if (cb != null) { cb.IsChecked = !cb.IsChecked; e.Handled = true; } }