在WPF中自定义组合框

问题描述:

我有一个狗列表和一个猫列表。我想要显示同一个组合框中的狗和猫的列表。但是我想区分它们。在WPF中自定义组合框

例如。在我列出狗的名单之前,它应该出现一个,我们称之为“不可选项目”,用不同的字体颜色表示“DOGS”,然后是狗列表。在狗的列表之后,另一种“不可选择的项目”以不同的字体颜色显示“CATS”,然后显示猫的列表。

有谁知道如何做到这一点?我一直在寻找,一直没有找到一个可以做到这一点的财产。

使用ComboBoxItem为您的“标题”条目。例如:

ComboBoxItem CBI = new ComboBoxItem(); 
CBI.Content = "DOGS"; 
CBI.IsEnabled = false; 
CBI.Background = Brushes.Aqua; 
comboBox1.Items.Add(CBI); 
//Add dogs here 
+0

这是一个糟糕的设计。这是一种胜利形式的方法。 – tsells

我会建议创建一个接口,狗和猫都实现。然后绑定到这些对象的集合,并使用xaml根据它所在的对象类型更改外观。

public enum AnimalType 
{ 
    Dog, 
    Cat 
} 
public interface Animal 
{ 
    AnimalType animal { get; set; } 
    string Name { get; set; } 
} 

public class Cat : Animal 
{ 
    public AnimalType animal { get; set; } 
    public string Name { get; set; } 

    public Cat() 
    { 
     animal = AnimalType.Cat; 
    } 
} 


public class Dog : Animal 
{ 
    public AnimalType animal { get; set; } 
    public string Name { get; set; } 

    public Dog() 
    { 
     animal = AnimalType.Dog; 
    } 
} 

public class MyViewModel 
{ 
    public List<Animal> MyAnimals { get; set; } 

    public MyViewModel() 
    { 
     MyAnimals = new List<Animal>(); 

     var a = new Dog(); 
     var b = new Cat(); 

     MyAnimals.Add(a); 
     MyAnimals.Add(b); 
    } 
} 

然后在你的XAML绑定到列表(或使用自动更新的道具观察的集合)

<ComboBox ItemsSource="{Binding Path=MyAnimals}" Style="{StaticResource MyCombo}"> 

,然后创建一个样式以更改基于数据的外观。

<Style TargetType="ComboBox" x:Key="MyCombo"> 
       <Style.Triggers> 
        <DataTrigger Binding="AnimalType" Value="Dog"> 
         <Setter Property = "Foreground" Value="Green"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style>