2012-05-16 85 views
1

我有一個狗列表和一個貓列表。我想要顯示同一個組合框中的狗和貓的列表。但是我想區分它們。在WPF中自定義組合框

例如。在我列出狗的名單之前,它應該出現一個,我們稱之爲「不可選項目」,用不同的字體顏色表示「DOGS」,然後是狗列表。在狗的列表之後,另一種「不可選擇的項目」以不同的字體顏色顯示「CATS」,然後顯示貓的列表。

有誰知道如何做到這一點?我一直在尋找,一直沒有找到一個可以做到這一點的財產。

回答

2

使用ComboBoxItem爲您的「標題」條目。例如:

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

這是一個糟糕的設計。這是一種勝利形式的方法。 – tsells

1

我會建議創建一個接口,狗和貓都實現。然後綁定到這些對象的集合,並使用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>