【问题标题】:WPF: Change FontSize of ComboBox without knowing itemsWPF:在不知道项目的情况下更改组合框的字体大小
【发布时间】:2011-07-07 06:26:24
【问题描述】:

我想在 wpf 中为一些ComboBoxes 设置FontSize。但我找到的唯一解决方案是设置特定ComboBoxItems 的FontSize。但是这些项目是动态添加的(所以我可以在ItemsChanged 上收听并每次设置样式,但这非常难看)。 有没有办法为ComboBox的所有项目设置FontSize

EDIT1:ComboBoxes 本身也在代码中动态添加。

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

就是这样!

【问题讨论】:

    标签: wpf combobox styles font-size


    【解决方案1】:

    1.如果要为整个ComboBox设置FontSize,可以设置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>
    

    【讨论】:

    • 两者都不起作用!第一个选项当然是我尝试过的第一件事。
    • @SpeziFish - 显然这是因为组合框项目的内容以某种方式覆盖了组合框上设置的字体大小。你能发布项目内容的代码吗?
    • @SpeziFish - 刚刚尝试过,效果很好。您是否在组合框内的文本框上设置了任何其他属性?这些文本框是否具有默认样式?你的组合框有默认样式吗?您能否还显示您创建和初始化文本框的代码。您也可以尝试在组合框中指定 TextBlock.FontSize="..."。
    • 对不起,没有文本框,只有字符串(见编辑),我看错了代码。
    • @SpeziFish - 两者。他们基本上做同样的事情。只有第一个选项在可视树上设置更高级别的字体大小。
    【解决方案2】:

    您可以通过定义 ComboBox 的 ItemTemplate 来定义所有项目的呈现方式。在那里你绑定到绑定项目的属性。

    例子:

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

    【讨论】:

    • 所以绑定不正确。只需检查对象的哪个属性必须绑定到 ComboBoxItem 的文本。将我的示例中的“内容”替换为此属性的名称
    • 我没有绑定,我在代码中手动添加了字符串(参见有问题的编辑)。
    • 所以试试 Text="{Binding Path=.}"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2016-11-22
    • 2013-05-14
    • 2015-09-14
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    相关资源
    最近更新 更多