我的谷歌搜索无果。有人听说过WPF中类似的控件吗?我正在尝试让它看起来像这样(winforms截图)。
我的谷歌搜索无果。有人听说过WPF中类似的控件吗?我正在尝试让它看起来像这样(winforms截图)。
您可以通过设置组合框的DataTemplate来自行完成此操作。这篇文章为您展示了如何在列表框中实现,但原理相同。
或许这篇文章更适合您所需,只需将项目模板的第一列设置为复选框并将其绑定到商业对象上的布尔值即可。
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}"
Width="20" />
<TextBlock Text="{Binding DayOfWeek}"
Width="100" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
这是我的下拉框。我使用了Martin Harris的代码以及来自此链接的代码(当WPF ComboBox的选择为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;
}
}
这里有两个处理程序——一个用于处理复选框的点击事件,另一个用于生成下拉框的文本。
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;
}
ObservableCollection<SelectableObject<tblObject>>
tblObject是我的对象类型,我想在ComboBox中显示一个列表。
希望这段代码对某人有用!
{Binding ObjectData.PropertyName}
。 - Nilesh Thakkarvalue
和display
成员。CheckComboBox
一起使用,您可以获取其source code,这很简单(还需要带上Selector class)。带有复选框的组合框
<ComboBox Height="16" Width="15">
<CheckBox Content="First Checkbox" />
<CheckBox Content="Second Checkbox" />
<CheckBox Content="Third Checkbox" />
<TextBlock Text="Some Text" />
</ComboBox>