シナリオ:
WPFアプリケーションに3つの標準フォントサイズを使用したい:BigFontSize
、、、。これらはdouble値であり、リソースディクショナリで次のように定義されます(適切に定義されている場合)。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
する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