寻找与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
- 只是选定的项目
我觉得这个方法更实用。 另外,您可以指定value
并display
要绑定的集合的成员。
如果你不想带CheckComboBox
的一堆其他控件,你可以得到它的源代码 ,这是非常简单的(需要带Selector类 )。