2017-03-06 49 views
0

我有幾個組合框具有相同的項目。我想將項目放入app.xaml,以防止代碼重複。我可以做這樣的事嗎?WPF:從樣式/資源加載組合框項目

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

回答

1

您可以創建一個StyleItemsSource屬性設置爲一個集合:

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

你也可以定義一個ComboBox實例作爲一個資源:

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

而且使用它像這個:

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

第三個選擇是創建一個自定義ComboBox控制,增加了普通ComboBoxItem S:

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

,創造這一個實例:

<local:MyCombo /> 
+0

首先一個看起來很整齊,但我當使用ContentControl時不能覆蓋屬性。例如,我必須將'SelectedValue'綁定到不同的屬性。 – Zergatul

+0

請看我編輯的答案。您可以將ItemsSource屬性設置爲一個集合。 – mm8

+0

謝謝@ mm8,那就是我一直在尋找的東西。 – Zergatul