我有一個狗列表和一個貓列表。我想要顯示同一個組合框中的狗和貓的列表。但是我想區分它們。在WPF中自定義組合框
例如。在我列出狗的名單之前,它應該出現一個,我們稱之爲「不可選項目」,用不同的字體顏色表示「DOGS」,然後是狗列表。在狗的列表之後,另一種「不可選擇的項目」以不同的字體顏色顯示「CATS」,然後顯示貓的列表。
有誰知道如何做到這一點?我一直在尋找,一直沒有找到一個可以做到這一點的財產。
我有一個狗列表和一個貓列表。我想要顯示同一個組合框中的狗和貓的列表。但是我想區分它們。在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
我會建議創建一個接口,狗和貓都實現。然後綁定到這些對象的集合,並使用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>
這是一個糟糕的設計。這是一種勝利形式的方法。 – tsells