我的Google技术使我失望。任何人都听说过类似WPF的控件。我正在尝试使其看起来像这样(winforms屏幕截图)。
您可以自行设置组合框的DataTemplate。 This article向您展示如何-对于列表框,但原理相同。
另一篇文章here可能更适合您尝试做的事情,只需将项目模板的第一列设置为复选框,然后将其绑定到业务对象上的布尔值。
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}"
Width="20" />
<TextBlock Text="{Binding DayOfWeek}"
Width="100" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
有我的组合框。我使用Martin Harris代码以及此链接中的代码Can a WPF ComboBox display alternative text when its selection is null?
<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" />
数据源的小类:
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的Text。
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是对象的类型,我想在ComboBox中显示其列表。
我希望这段代码对某人有用!
尝试从CheckComboBox尝试Extended WPF Toolkit。对我来说,主要优点是有两个绑定列表:
我发现这种方法更实用。另外,您可以指定要绑定的集合的value
和display
成员。
如果您不想带CheckComboBox
带来许多其他控件,则可以获取它的source code,这非常简单(也需要带Selector class)。