4

设想:

我想为我的 WPF 应用程序使用 3 种标准字体大小:BigFontSizeNormalFontSizeSmallFontSize. 这些是双精度值,它们在资源字典中定义为(sys适当定义的位置):

<sys:Double x:Key="BigFontSize">18</sys:Double>
<sys:Double x:Key="NormalFontSize">14</sys:Double>
<sys:Double x:Key="SmallFontSize">12</sys:Double>

这很好用。但我随机选择了 14 作为正常尺寸。我想要的是获得系统定义的字体大小NormalFontSize。(如果完成了,我可以使用此处描述的转换器来获取BigFontSizeSmallFontSize相对于NormalFontSize


线索:

我从文档中发现默认字体大小存储在静态属性 (double)SystemFonts.MessageFontSize中。但是我应该怎么做才能将该值检索到资源字典?(我知道BindingDynamicResource不能应用。但是,嘿,这是一个静态值,所以我该如何应用StaticResourcex:Static什么?)

我试过了

<sys:Double x:Key="XXXFontSize">
    <StaticResource ResourceKey="SystemFonts.MessageFontSize" />
</sys:Double>

<sys:Double x:Key="XXXFontSize">
    <x:Static ResourceKey="SystemFonts.MessageFontSize" />
</sys:Double>

两者似乎都不起作用(如预期的那样)。我收到一条错误消息Cannot add content to object of type 'System.Double'.

笔记:

  • 我不想从代码中执行此操作,例如从 App()。(是否可以为 ResourceDictionary 提供代码隐藏?)
  • 我不想将其封装为可以派生其他样式的通用样式(使用BasedOn),因为我有几个资源字典,并且无法使用DynamicResourcewithBasedOn
    也就是说,我不能使用

    <Style x:Key="BigFont" TargetType="{x:Type Control}"}>
        <Setter Property="Control.FontSize" 
                Value="{Binding Source={x:Static SystemFonts.MessageFontSize},
                                Converter={ . . . }" />
    </Style>
    

    因为,如果我在其他 ResourceDictionary 中有一个样式,比如说HeaderTextBlockStyle,那么我将不得不使用BasedOn={DynamicResource BigFont}这是不可能的(我认为)

任何帮助将不胜感激。
谢谢你。

标签: WPF SystemFonts.MessageFontSize ResourceDictionary FontSize BasedOn DynamicResource

4

2 回答 2

5

我做过这样的...

public partial class GlobalResources : ResourceDictionary
{
    public GlobalResources()
    {
        this.Add("GiantFontSize", SystemFonts.MessageFontSize * 2.5);
        this.Add("BigFontSize", SystemFonts.MessageFontSize * 1.5);
        this.Add("MediumFontSize", SystemFonts.MessageFontSize * 1.25);
        this.Add("NormalFontSize", SystemFonts.MessageFontSize);
        this.Add("SmallFontSize", SystemFonts.MessageFontSize * 0.85);
    }
}

......它就像一个奇迹一样工作!!!我可以在同一个(部分)资源字典或像这样的其他资源字典中使用这些资源......

<Style ...>
    <Setter Property="FontSize"
            Value="{DynamicResource MediumFontSize}" />

    ...

</Style>

我不知道这是否是“好习惯”(请对此发表评论),我只知道它有效..!!!

于 2010-02-04T07:48:12.310 回答
0

看看这篇文章:覆盖默认样式它可能有你正在寻找的东西。

于 2010-01-29T16:13:49.757 回答