mg0*_*007 4 wpf font-size resourcedictionary dynamicresource
设想:
我想用3个标准字体大小为我的WPF应用程序: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>
Run Code Online (Sandbox Code Playgroud)
这很好用。但是我随机选择了 14 个作为正常尺寸。我想要的是获得系统定义的字体大小NormalFontSize。(如果这样做了,我可以使用此处描述的转换器来获取BigFontSize和SmallFontSize相对于NormalFontSize)
线索:
我从文档中发现默认字体大小存储在静态属性 (double) 中SystemFonts.MessageFontSize。但是我应该怎么做才能将该值检索到资源字典中?(我知道Binding或DynamicResource不能适用。但是,嘿,这是一个静态值,所以我怎么能申请StaticResource或x:Static或什么?)
我试过了
<sys:Double x:Key="XXXFontSize">
<StaticResource ResourceKey="SystemFonts.MessageFontSize" />
</sys:Double>
Run Code Online (Sandbox Code Playgroud)
和
<sys:Double x:Key="XXXFontSize">
<x:Static ResourceKey="SystemFonts.MessageFontSize" />
</sys:Double>
Run Code Online (Sandbox Code Playgroud)
两者似乎都不起作用(如预期)。我收到一条错误消息Cannot add content to object of type 'System.Double'.
笔记:
我不想将其封装在可以从中派生出其他样式的通用样式中(使用BasedOn),因为我有多个资源字典,并且无法使用DynamicResourcewithBasedOn
也就是说,我不能使用
<Style x:Key="BigFont" TargetType="{x:Type Control}"}>
<Setter Property="Control.FontSize"
Value="{Binding Source={x:Static SystemFonts.MessageFontSize},
Converter={ . . . }" />
</Style>
Run Code Online (Sandbox Code Playgroud)
因为,如果我在其他 ResourceDictionary 中有一个样式,比如说HeaderTextBlockStyle,那么我将不得不使用BasedOn={DynamicResource BigFont}这是不可能的(我认为)
任何帮助将不胜感激。
谢谢你。
标签:WPF SystemFonts.MessageFontSize ResourceDictionary FontSize BasedOn DynamicResource
我做过这样的...
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);
}
}
Run Code Online (Sandbox Code Playgroud)
......它就像一个奇迹一样工作!!!我可以在同一个(部分)资源字典或像这样的其他资源字典中使用这些资源......
<Style ...>
<Setter Property="FontSize"
Value="{DynamicResource MediumFontSize}" />
...
</Style>
Run Code Online (Sandbox Code Playgroud)
我不知道这是否是“好的做法”(请对此发表评论),我只知道它有效..!!!