2011-03-02 56 views
2

我想爲wpf中的某些ComboBox es設置FontSize。但我發現的唯一解決方案是設置特定ComboBoxItemFontSize。但是這些項目是動態添加的(所以我可以聽ItemsChanged並每次設置樣式,但這非常難看)。 有沒有辦法一般爲ComboBox的所有項目設置FontSizeWPF:在不知道項目的情況下更改組合框的字體大小

EDIT1:ComboBox es本身也被動態添加到代碼中。

EDIT2:追隨你的答案一定是這樣的:

<Style TargetType="ComboBox" x:Key="MyComboBox""> 
    <Setter Property="ItemContainerStyle" Value="{DynamicResource MyComboItemStyle}"/> 
</Style> 
<Style x:Key="MyComboItemStyle" TargetType="{x:Type ComboBoxItem}"> 
    <Setter Property="FontSize" Value="14"/> 
</Style> 

但它也沒有任何影響!

EDIT3:下面是如何添加項目:

string[] strEnums = //Some dynamic magic; 
foreach (string str in strEnums) 
{ 
    (input as ComboBox).Items.Add(strEnum); 
} 

EDIT4:而這裏的組合框的初始化:

input = new ComboBox(); 
input.SetResourceReference(ComboBox.StyleProperty, "MyComboBox"); 

這一切!

回答

4

您可以通過定義ComboBox的ItemTemplate來定義所有項目的渲染方式。在那裏你綁定到綁定項目的屬性。

例子:

<ComboBox ItemsSource="{Binding whateverbinding}"> 
<ComboBox.ItemTemplate> 
<DataTemplate> 
<TextBlock Text="{Binding Path=Content}" FontSize="12" /> 
</DataTemplate> 
</ComboBox.ItemTemplate> 
</ComboBox> 
+0

不錯,但現在的項目是空的... – SpeziFish 2011-03-02 13:21:39

+0

所以綁定是不正確的。只需檢查您的對象的哪個屬性必須綁定到ComboBoxItem的文本。將我的示例中的「Content」替換爲此屬性的名稱 – fixagon 2011-03-02 14:21:09

+0

我沒有綁定,我在代碼中手動添加字符串(請參閱有問題的編輯)。 – SpeziFish 2011-03-02 14:28:24

5

1.如果您想設置FontSize整個ComboBox,您可以設置ComboBox本身的FontSize屬性:

<ComboBox FontSize="18" ...> 
    ... 
</ComboBox> 

2.如果你想要僅更改項目上的FontSize或根據某些條件更改字體大小,應指定「ItemContainerStyle」:

<ComboBox ...> 
    <ComboBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ComboBoxItem}"> 
      <Setter Property="FontSize" Value="18"/> 
     </Style> 
    </ComboBox.ItemContainerStyle> 
    ... 
</ComboBox> 
+0

兩者都不起作用!第一種選擇當然是我嘗試過的第一件事。 – SpeziFish 2011-03-02 13:24:37

+0

@SpeziFish - 顯然這是因爲組合框項目的內容以某種方式覆蓋了組合框中設置的字體大小。你能發佈物品內容的代碼嗎? – 2011-03-02 13:41:07

+0

好的,請參閱我在這個問題中的編輯。 – SpeziFish 2011-03-02 13:56:18

相關問題