我有一张狗的名单和一张猫的名单。我想在同一个组合框中显示狗和猫的列表。但是我想区分它们。
例如。在我放置狗列表之前,它应该出现一个,让我们用不同的字体颜色将其称为“不可选择项”,上面写着“DOGS”,然后是狗列表。在狗列表之后,另一个字体颜色不同的“不可选择项目”应该是“CATS”,然后是猫列表。
有谁知道如何做到这一点?我一直在寻找,但找不到可以做到这一点的房产。
用于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);
}
}
然后在您的 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>