2017-03-06 4 views
0

Ich habe mehrere Comboboxen mit den gleichen Elementen. Ich möchte Elemente in app.xaml, um Code-Duplizierung zu verhindern. Kann ich so etwas tun?WPF: ComboBox-Elemente von Stil/Ressource laden

<Style x:Key="MyCombo" TargetType="{x:Type ComboBox}"> 
    <Setter Property="Items"> 
     <ComboboxItem Content="item one" /> 
     <ComboboxItem Content="item two" /> 
    </Setter> 
</Style> 

Antwort

1

Sie könnten eine Style erstellen, die die ItemsSource Eigenschaft zu einer Sammlung setzt:

<Style TargetType="ComboBox" x:Key="MyCombo" xmlns:c="clr-namespace:System.Collections;assembly=mscorlib"> 
    <Setter Property="ItemsSource"> 
     <Setter.Value> 
      <c:ArrayList> 
       <ComboBoxItem>item one</ComboBoxItem> 
       <ComboBoxItem>item two</ComboBoxItem> 
      </c:ArrayList> 
     </Setter.Value> 
    </Setter> 
</Style> 

Sie können auch definieren eine ComboBox Instanz als Ressource:

<ComboBox x:Key="MyCombo" x:Shared="False"> 
    <ComboBoxItem Content="item one" /> 
    <ComboBoxItem Content="item two" /> 
</ComboBox> 

und es verwenden, wie dies:

<ContentControl Content="{StaticResource MyCombo}" /> 

würde Eine dritte Möglichkeit, einen benutzerdefinierten ComboBox Steuerelement, das die gemeinsamen ComboBoxItem s fügt zu erstellen:

public class MyCombo : ComboBox 
{ 
    public MyCombo() 
    { 
     Items.Add(new ComboBoxItem() { Content = "item one" }); 
     Items.Add(new ComboBoxItem() { Content = "item two" }); 
    } 
} 

und erstellen eine Instanz dieses:

<local:MyCombo /> 
+0

Zuerst einen Blick recht ordentlich, aber ich Eigenschaften können nicht überschrieben werden, wenn 'ContentControl' verwendet wird. Zum Beispiel muss ich 'SelectedValue' an verschiedene Eigenschaften binden. – Zergatul

+0

Bitte sehen Sie meine bearbeitete Antwort. Sie könnten die ItemsSource-Eigenschaft auf eine Auflistung festlegen. – mm8

+0

Danke @ mm8, genau das habe ich gesucht. – Zergatul