4

我一直在设置资源字典来设置 WPF 应用程序中所有控件的样式,并且在为标签设置字体粗细时发现了一些奇怪的行为。

我必须为标签设置样式,第一个具有正常字体粗细:

<Style x:Key="Label" TargetType="{x:Type Label}">
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="Margin" Value="10,0"/>
</Style>

第二个设置为粗体:

<Style x:Key="LabelBold" TargetType="{x:Type Label}">
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="Margin" Value="10,0"/>
    <Setter Property="FontWeight" Value="Bold"/>
</Style>

问题是当我使用粗体加权字体时,文本会缩小(或文本间距):

在此处输入图像描述

我已经搜索过,但我似乎看不到任何原因,如果有什么我希望文本会因为字母厚度增加而扩大。这是要发生的吗?如果是这样,有办法解决吗?

编辑:窗口使用以下字体:

<Setter Property="TextOptions.TextFormattingMode" Value="Display"/>
<Setter Property="FontFamily" Value="Calibri"/>
<Setter Property="FontSize" Value="12"/>
4

3 回答 3

4

我不确定发生了什么,但我猜有些东西覆盖FontSize了粗体标签的选择。如果设置为 11 而不是 12,我可以获得与您的示例大致相同的间距FontSize。我得到这个图像,顶部 2 个标签设置为FontSize12,底部标签设置为FontSize11:

在此处输入图像描述

使用这个:

应用程序.Xaml

<Application x:Class="WpfApplication1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <Style x:Key="Label" TargetType="{x:Type Label}">
            <Setter Property="VerticalAlignment" Value="Center"/>
            <Setter Property="Margin" Value="10,0"/>
        </Style>
        <Style x:Key="LabelBold" TargetType="{x:Type Label}">
            <Setter Property="VerticalAlignment" Value="Center"/>
            <Setter Property="Margin" Value="10,0"/>
            <Setter Property="FontWeight" Value="Bold"/>
        </Style>
        <Style x:Key="WindowStyle" TargetType="{x:Type Window}">
            <Setter Property="TextOptions.TextFormattingMode" Value="Display"/>
            <Setter Property="FontFamily" Value="Calibri"/>
            <Setter Property="FontSize" Value="12"/>
        </Style>
    </Application.Resources>
</Application>

主窗口.xaml

Window x:Class="WpfApplication1.MainWindow"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Style="{StaticResource WindowStyle}">
    <Grid>
        <Label Style="{StaticResource Label}" Height="32" HorizontalAlignment="Left" Margin="10,10,0,0" Name="label1" VerticalAlignment="Top">This is a test of font-weight:</Label>
        <Label Style="{StaticResource LabelBold}" Height="32" HorizontalAlignment="Left" Margin="10,30,0,0" Name="label2" VerticalAlignment="Top">This is a test of font-weight:</Label>
        <Label Style="{StaticResource LabelBold}" Height="32" HorizontalAlignment="Left" Margin="10,50,0,0" FontSize="11" Name="label5" VerticalAlignment="Top">This is a test of font-weight:</Label>
    </Grid>
</Window>
于 2012-10-27T02:23:57.350 回答
4

在对 Mark Hall 和 Sayed Saad 的评论进行了一些调查之后,我设法找出了造成这种情况的原因:TextOptions.TextFormattingMode = Display。

正如马克指出的那样,当您增大字体大小时,粗体文本确实会比正常字体文本更大。但是,如果我将 TextFormattingMode 更改为“Ideal”,那么无论字体大小如何,粗体字体都会比普通字体大。

编辑:根据我在这里的发现,我发布了另一个问题,可以在这里找到答案:TextOptions.TextFormattingMode 影响带有粗体字重的文本

于 2012-10-29T14:17:49.987 回答
2

看起来您没有使用相同的字体大小。我尝试了两个具有相同字体大小和边距的标签。实际上粗体标签扩大了。

于 2012-10-26T16:04:58.630 回答