【发布时间】:2011-01-10 20:13:24
【问题描述】:
场景:
我想为我的 WPF 应用程序使用 3 种标准字体大小:BigFontSize、NormalFontSize 和 SmallFontSize。这些是双精度值,它们在资源字典中被定义为(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 得到BigFontSize 和SmallFontSize 相对于NormalFontSize)
线索:
我从文档中发现默认字体大小存储在静态属性(双精度)SystemFonts.MessageFontSize 中。但是我应该怎么做才能将该值检索到资源字典? (我知道Binding 或DynamicResource 不能应用。但是,嘿,这是一个静态值,那么我该如何应用StaticResource 或x: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),因为我有多个资源字典,并且无法将DynamicResource与BasedOn一起使用
也就是说,我不能使用<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
【问题讨论】:
标签: wpf font-size resourcedictionary dynamicresource