在 WPF 中自定义组合框

本文关键字:组合 自定义 WPF | 更新日期: 2023-09-27 18:34:36

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

例如。在我放置狗列表之前,它应该出现一个,让我们用不同的字体颜色称它为"不可选择的项目",上面写着"DOGS",然后是狗列表。在狗列表之后,另一个不同字体颜色的"不可选择项目"应该写着"CATS",然后是猫列表。

有谁知道如何做到这一点?我一直在寻找,但一直找不到可以做到这一点的房产。

在 WPF 中自定义组合框

使用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>