템플릿을 사용하여 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() { [email protected]"/images/up.png", Name="Item Group 1", IsSelectable=false},
new Item() { [email protected]"/images/up.png", Name="Item 1", IsSelectable=true},
new Item() { [email protected]"/images/up.png", Name="Item 2", IsSelectable=true},
new Item() { [email protected]"/images/up.png", Name="Item 3", IsSelectable=true},
new Item() { [email protected]"/images/up.png", Name="Item Group 2", IsSelectable=false},
new Item() { [email protected]"/images/up.png", Name="Item 1", IsSelectable=true},
new Item() { [email protected]"/images/up.png", Name="Item 2", IsSelectable=true},
new Item() { [email protected]"/images/up.png", Name="Item 3", IsSelectable=true}
};
: 여기
빠른 예입니다 따라서 선택이 불가능한 항목을 정상적으로 보이도록 스타일을 지정해야합니다.
당신은 어떤 비 그룹 항목을 선택할 수 있습니다, 그것은 정상적인 콤보처럼 작동 :
여기 내 결과입니다. 버튼의 경우 선택한 항목의 데이터를 기반으로 버튼의 가시성을 제어 할 수 있습니다.
희망이 도움이됩니다.
하위 그룹을 성취하려면 아이템에 그룹 레벨을 나타내는 추가 속성을 추가하고 데이터 트리거를 사용하여 이름 라벨의 여백에 영향을 줄 수 있습니다. – Duane
구분 기호는 어떻게됩니까? – jur
아마 ItemTemplate을 다른 StackPanel로 감싸고 현재 내용 다음에 줄을 던진 다음 기존 트리거를 사용하여 해당 항목의 가시성을 결정할 수 있습니다. 또는 ItemTemplate의 현재 내용을 Border로 랩핑하고 BorderThickness (즉, 트리거되지 않은 "0,0,0,0"및 트리거 된 "0,0,0,1")를 제어하십시오. 그것을 할 수있는 여러 가지 방법이 있습니다. –