(WPF)如何从ResourceDictionary设置sys:Double到SystemFonts.MessageFontSize的值?

时间:2010-01-29 12:48:17

标签: wpf font-size resourcedictionary dynamicresource

情景:

我想为我的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的系统定义字体大小。 (如果已经完成,我可以使用转换器as described here来获取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),因为我有几个资源字典,并且不可能使用{{ 1}}与DynamicResource
    也就是说,我不能使用

    BasedOn

    因为,如果我在其他ResourceDictionary中有一个样式,比如<Style x:Key="BigFont" TargetType="{x:Type Control}"}> <Setter Property="Control.FontSize" Value="{Binding Source={x:Static SystemFonts.MessageFontSize}, Converter={ . . . }" /> </Style> ,那么我将不得不使用HeaderTextBlockStyle这是不可能的(我认为)

非常感谢任何帮助 谢谢。

TAGS :WPF SystemFonts.MessageFontSize ResourceDictionary FontSize BasedOn DynamicResource

2 个答案:

答案 0 :(得分:4)

我这样做了......

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>

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

答案 1 :(得分:0)

查看这篇文章:Override default styles它可能有你想要的东西。