寻找与checkbox的WPFcombobox

我的谷歌技能使我失望。 任何人都听说WPF的控制。 我试图让它看起来像这样(winforms截图)。

替代文字http://www.angryhacker.com/toys/up.png

您可以通过设置combobox的DataTemplate自己做到这一点。 本文将向您展示如何 – 对于列表框,但原理是一样的。


这里的另一篇文章可能更适合你正在做的事情,简单地将项目模板的第一列设置为checkbox并将其绑定到业务对象上的布尔值。

<ComboBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <CheckBox IsChecked="{Binding IsSelected}" Width="20" /> <TextBlock Text="{Binding DayOfWeek}" Width="100" /> </StackPanel> </DataTemplate> </ComboBox.ItemTemplate> 

有我的combobox。 我使用马丁哈里斯代码和代码从这个链接WPFcombobox可以显示替代文字时,其select为空?

 <ComboBox Name="cbObjects" Grid.Column="1" Grid.Row="1" VerticalAlignment="Center" Margin="2,2,6,0" SelectionChanged="OnCbObjectsSelectionChanged" > <ComboBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <CheckBox IsChecked="{Binding IsSelected}" Width="20" VerticalAlignment="Center" Checked="OnCbObjectCheckBoxChecked" Unchecked="OnCbObjectCheckBoxChecked" /> <TextBlock Text="{Binding ObjectData}" VerticalAlignment="Center" /> </StackPanel> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> <TextBlock IsHitTestVisible="False" Name="tbObjects" Text="Выберите объекты..." Grid.Column="1" Grid.Row="1" VerticalAlignment="Center" Margin="6,2,6,0" /> 

数据源小class:

 public class SelectableObject <T> { public bool IsSelected { get; set; } public T ObjectData { get; set; } public SelectableObject(T objectData) { ObjectData = objectData; } public SelectableObject(T objectData, bool isSelected) { IsSelected = isSelected; ObjectData = objectData; } } 

还有两个处理程序 – 一个用于处理checkbox点击和一个用于combobox的文本。

 private void OnCbObjectCheckBoxChecked(object sender, RoutedEventArgs e) { StringBuilder sb = new StringBuilder(); foreach (SelectableObject<tblObject> cbObject in cbObjects.Items) if (cbObject.IsSelected) sb.AppendFormat("{0}, ", cbObject.ObjectData.Description); tbObjects.Text = sb.ToString().Trim().TrimEnd(','); } private void OnCbObjectsSelectionChanged(object sender, SelectionChangedEventArgs e) { ComboBox comboBox = (ComboBox)sender; comboBox.SelectedItem = null; } 

对于ComboBox.ItemsSource我使用

 ObservableCollection<SelectableObject<tblObject>> 

其中tblObject是我的对象的types,我想在ComboBox中显示的列表。

我希望这个代码对某个人有用!

从扩展WPF工具包尝试CheckComboBox 。 我的主要优点是有两个绑定列表:

  • 所有项目可供select
  • 只是选定的项目

我觉得这个方法更实用。 另外,您可以指定valuedisplay要绑定的集合的成员。

如果你不想带CheckComboBox的一堆其他控件,你可以得到它的源代码 ,这是非常简单的(需要带Selector类 )。