C# 在WPF中自定义组合框
我有一张狗和猫的名单。我想在同一个组合框中显示狗和猫的列表。然而,我想区分它们 比如说。在我把狗的列表放进去之前,它应该是一个,让我们用不同的字体颜色称它为“不可选择的项目”,上面写着“狗”,然后是狗的列表。在狗的列表之后,另一个不同字体颜色的“不可选择项”应该是“猫”,然后是猫的列表C# 在WPF中自定义组合框,c#,wpf,list,combobox,C#,Wpf,List,Combobox,我有一张狗和猫的名单。我想在同一个组合框中显示狗和猫的列表。然而,我想区分它们 比如说。在我把狗的列表放进去之前,它应该是一个,让我们用不同的字体颜色称它为“不可选择的项目”,上面写着“狗”,然后是狗的列表。在狗的列表之后,另一个不同字体颜色的“不可选择项”应该是“猫”,然后是猫的列表 有人知道怎么做吗?我一直在寻找,但没有找到一个可以这样做的财产 使用ComboBoxItem作为“标题”条目。例如: ComboBoxItem CBI = new ComboBoxItem(); CBI.Cont
有人知道怎么做吗?我一直在寻找,但没有找到一个可以这样做的财产 使用
ComboBoxItem
作为“标题”条目。例如:
ComboBoxItem CBI = new ComboBoxItem();
CBI.Content = "DOGS";
CBI.IsEnabled = false;
CBI.Background = Brushes.Aqua;
comboBox1.Items.Add(CBI);
//Add dogs here
我建议创建一个猫狗都能实现的界面。然后绑定到这些对象的集合,并使用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);
}
}
公共枚举动物类型
{
狗,
猫
}
公共界面动物
{
AnimalType动物{get;set;}
字符串名称{get;set;}
}
公猫:动物
{
公共动物类型动物{get;set;}
公共字符串名称{get;set;}
公猫
{
动物=动物型。猫;
}
}
公营狗:动物
{
公共动物类型动物{get;set;}
公共字符串名称{get;set;}
公犬()
{
动物=动物型。狗;
}
}
公共类MyViewModel
{
公共列表MyAnimals{get;set;}
公共MyViewModel()
{
MyAnimals=新列表();
var a=新狗();
var b=新的Cat();
添加(a);
添加(b);
}
}
然后在XAML中绑定到列表(或使用可观察集合进行自动道具更新)
然后根据数据创建样式以更改外观
<Style TargetType="ComboBox" x:Key="MyCombo">
<Style.Triggers>
<DataTrigger Binding="AnimalType" Value="Dog">
<Setter Property = "Foreground" Value="Green"/>
</DataTrigger>
</Style.Triggers>
</Style>
这是一个糟糕的设计。这是一种双赢的方法。
<Style TargetType="ComboBox" x:Key="MyCombo">
<Style.Triggers>
<DataTrigger Binding="AnimalType" Value="Dog">
<Setter Property = "Foreground" Value="Green"/>
</DataTrigger>
</Style.Triggers>
</Style>