テンプレートを使用して ComboBox のスタイルを変更し、目的の外観にすることができます。
簡単な例を次に示します。
XAML
<ComboBox Width="200" Height="30" ItemsSource="{Binding ItemList}">
<ComboBox.ItemContainerStyle>
<Style>
<Setter Property="UIElement.IsEnabled" Value="{Binding IsSelectable}" />
</Style>
</ComboBox.ItemContainerStyle>
<ComboBox.ItemTemplate>
<DataTemplate >
<StackPanel Orientation="Horizontal">
<Image Name="ImageControl" Source="{Binding ImagePath}" Width="10" Height="10" />
<Label Content="{Binding Name}" >
<Label.Style>
<Style TargetType="Label">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="Black" />
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsSelectable}" Value="False">
<Setter TargetName="ImageControl" Property="Visibility" Value="Collapsed" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
C#
// A class to hold my data for the combobox
public class Item
{
public string Name { get; set; }
public bool IsSelectable { get; set; }
public string ImagePath { get; set; }
}
// In your datacontext
public ObservableCollection<Item> ItemList { get; set; }
public ComboBoxFun()
{
ItemList = new ObservableCollection<Item>()
{
new Item() { ImagePath=@"/images/up.png", Name="Item Group 1", IsSelectable=false},
new Item() { ImagePath=@"/images/up.png", Name="Item 1", IsSelectable=true},
new Item() { ImagePath=@"/images/up.png", Name="Item 2", IsSelectable=true},
new Item() { ImagePath=@"/images/up.png", Name="Item 3", IsSelectable=true},
new Item() { ImagePath=@"/images/up.png", Name="Item Group 2", IsSelectable=false},
new Item() { ImagePath=@"/images/up.png", Name="Item 1", IsSelectable=true},
new Item() { ImagePath=@"/images/up.png", Name="Item 2", IsSelectable=true},
new Item() { ImagePath=@"/images/up.png", Name="Item 3", IsSelectable=true}
};
唯一のトリッキーな部分は、項目を無効にすると、無効としてスタイルが設定されるため、選択できない項目をスタイルして、正常に表示されるようにする必要があることです。
ここに私の結果があります:
非グループ項目を選択でき、通常の ComboBox のように機能します。ボタンに関しては、選択した項目のデータに基づいてボタンの表示を簡単に制御できます。
お役に立てれば。