WPF: изменить FontSize ComboBox, не зная элементов - PullRequest
2 голосов
/ 02 марта 2011

Я хочу установить FontSize для некоторых ComboBox es в wpf.Но единственное решение, которое я нашел, - это установить FontSize определенных ComboBoxItem с.Но элементы добавляются динамически (поэтому я мог слушать ItemsChanged и каждый раз устанавливать стиль, но это очень уродливо).Есть ли способ установить FontSize для всех элементов ComboBox в целом?

EDIT1: Сами ComboBox также динамически добавляются в код.

РЕДАКТИРОВАТЬ2: После ваших ответов должно быть что-то вроде этого:

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

Но это также не имеет никакого эффекта!

РЕДАКТИРОВАНИЕ3: Вот как я добавляю элементы:

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");

Вот и все!

Ответы [ 2 ]

5 голосов
/ 02 марта 2011

1.Если вы хотите установить FontSize для всего ComboBox, вы можете установить свойство FontSize самого ComboBox:

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

2.Если вы хотите изменить FontSize только для элементов или изменить размер шрифта на основе некоторых критериев, вы должны указать `ItemContainerStyle ':

<ComboBox ...>
   <ComboBox.ItemContainerStyle>
       <Style TargetType="{x:Type ComboBoxItem}">
           <Setter Property="FontSize" Value="18"/>
       </Style>
   </ComboBox.ItemContainerStyle>
   ...
</ComboBox>
4 голосов
/ 02 марта 2011

Вы можете определить способ отображения всех элементов с помощью определения ItemTemplate ComboBox. Там вы привязываетесь к свойствам связанных Предметов.

Пример:

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