显示控件时出现问题

时间:2013-03-24 14:21:20

标签: c# .net wpf xaml data-binding

我正在尝试将标签存储在ComboBox中,其类别类似于this

但是,ComboBox项目看起来像这样:

enter image description here

这是我到目前为止所做的:

的App.xaml

<DataTemplate x:Key="groupStyle">
    <Label FontWeight="Bold" Content="{Binding Name}"/>
</DataTemplate>

代码背后

    ComboBox comboBox1 = new ComboBox();

    GroupStyle style = new GroupStyle();
    style.HeaderTemplate = (DataTemplate)this.FindResource("groupStyle");
    comboBox1.GroupStyle.Add(style);
    comboBox1.DisplayMemberPath = "Item";
    ObservableCollection<CategoryItem<Label>> items = new ObservableCollection<CategoryItem<string>>();

    Label label = new Label();
    TextBlock block = new TextBlock();
    block.Text = "Text";
    label.Content = block;

    items.Add(new CategoryItem<Label> { Category = "Category", Item = label });

    CollectionViewSource cvs = new CollectionViewSource();
    cvs.GroupDescriptions.Add(new PropertyGroupDescription("Category"));
    cvs.Source = items;

    Binding b = new Binding();
    b.Source = cvs;
    BindingOperations.SetBinding(comboBox1, ComboBox.ItemsSourceProperty, b);

public class CategoryItem<T>
{
    public T Item { get; set; }
    public string Category { get; 
}

1 个答案:

答案 0 :(得分:2)

您应该使用ItemContainerStyle。不过,您可以查看this

<强>的App.xaml

<DataTemplate x:Key="groupStyle">
    <TextBlock FontWeight="Bold" Text="{Binding Name}"/>
</DataTemplate>
<Style TargetType="{x:Type ComboBoxItem}"  x:Key="comboBoxItemStyle">
    <Setter Property="Template" >
        <Setter.Value>
            <ControlTemplate>
                <Label Background="Red" Content="{Binding Item}"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

代码背后:

 ComboBox comboBox1 = new ComboBox();

 GroupStyle style = new GroupStyle();
 style.HeaderTemplate = (DataTemplate)this.FindResource("groupStyle");
 comboBox1.GroupStyle.Add(style);
 comboBox1.DisplayMemberPath = "Item";

 // Here is what you are looking for
 comboBox1.ItemContainerStyle = (Style)this.FindResource("comboBoxItemStyle");


 ObservableCollection<CategoryItem<string>> items = new ObservableCollection<CategoryItem<string>>();

 CollectionViewSource cvs = new CollectionViewSource();
 cvs.GroupDescriptions.Add(new PropertyGroupDescription("Category"));
 cvs.Source = items;

 Binding b = new Binding();
 b.Source = cvs;
 BindingOperations.SetBinding(
           comboBox1, ComboBox.ItemsSourceProperty, b);