设想:
我想为我的 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
。(如果完成了,我可以使用此处描述的转换器来获取BigFontSize
和SmallFontSize
相对于NormalFontSize
)
线索:
我从文档中发现默认字体大小存储在静态属性 (double)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
withBasedOn
也就是说,我不能使用<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