0

ラベルをComboBoxにカテゴリとともに保存しようとしています-このようなものです。

ただし、ComboBoxアイテムは次のように表示されます。

ここに画像の説明を入力してください

これは私がこれまでに行ったことです:

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; 
}
4

1 に答える 1

2

を使用する必要がありますItemContainerStyleしかし、あなたはこれを見るかもしれません

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);
于 2013-03-24T14:27:02.613 に答える