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