4

我怎样才能增加一个字体,比方说,TextBlock?我不想有这样的事情:

<TextBlock FontSize="20">
  text
</TextBlock>

因为当用户更改控件字体大小的 Windows 设置时,它将无法正常工作。我们有类似+VALUE(例如+2)的东西,类似于 HTML 吗?

编辑
这就是我谈论 Windows 设置的意思: 在此处输入图像描述

但我收到的答案完全让我满意。

4

4 回答 4

10

WPF 没有 em 字体大小,在这个SO的答案中有替代品

最简单的可能是

<ScaleTransform ScaleX="1.2" ScaleY="1.2" /> 
于 2012-08-15T08:24:27.043 回答
7

将 Bob Vale 的答案改编为您的原始代码

<TextBlock>
    <TextBlock.RenderTransform>
        <ScaleTransform ScaleX="1.2" ScaleY="1.2" />
    </TextBlock.RenderTransform>
    text
</TextBlock>
于 2015-11-11T13:30:23.523 回答
2

首先,您应该为您的字体大小创建一个应用程序范围的样式,如本答案所述:WPF global font size

然后,您可以将 fontsize 值绑定到采用控制面板中定义的大小的静态类的属性,并相应地对其进行调整。

于 2012-08-15T08:29:22.463 回答
1

对于那些发现这个问题需要相对字体大小机制来实现设计目的的可怜人,例如您在 css 中使用的,我发现了一个似乎在 WPF 中工作的 hack。

它是这样使用的:

<StackPanel>
    <TextBlock>outer</TextBlock>
    <ContentControl local:RelativeFontSize.RelativeFontSize="2">
        <StackPanel>
            <TextBlock>inner</TextBlock>
            <ContentControl local:RelativeFontSize.RelativeFontSize="2">
                <StackPanel>
                    <TextBlock>innerest</TextBlock>
                </StackPanel>
            </ContentControl>
        </StackPanel>
    </ContentControl>
</StackPanel>

这给出了这个:

截屏

这是代码:

public static class RelativeFontSize
{
    public static readonly DependencyProperty RelativeFontSizeProperty =
        DependencyProperty.RegisterAttached("RelativeFontSize", typeof(Double), typeof(RelativeFontSize), new PropertyMetadata(1.0, HandlePropertyChanged));

    public static Double GetRelativeFontSize(Control target)
        => (Double)target.GetValue(RelativeFontSizeProperty);

    public static void SetRelativeFontSize(Control target, Double value)
        => target.SetValue(RelativeFontSizeProperty, value);

    static Boolean isInTrickery = false;

    public static void HandlePropertyChanged(Object target, DependencyPropertyChangedEventArgs args)
    {
        if (isInTrickery) return;

        if (target is Control control)
        {
            isInTrickery = true;

            try
            {
                control.SetValue(Control.FontSizeProperty, DependencyProperty.UnsetValue);

                var unchangedFontSize = control.FontSize;

                var value = (Double)args.NewValue;

                control.FontSize = unchangedFontSize * value;

                control.SetValue(Control.FontSizeProperty, unchangedFontSize * value);
            }
            finally
            {
                isInTrickery = false;
            }
        }
    }
}
于 2017-07-03T18:14:01.910 回答