4

シナリオ:

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(それが行われた場合、ここで説明されているコンバーターを使用してBigFontSizeSmallFontSize相対を取得できますNormalFontSize


ヒント :

ドキュメントから、デフォルトのフォントサイズが静的プロパティ(double)に格納されていることがわかりましたSystemFonts.MessageFontSize。しかし、その値をリソースディクショナリに取得するにはどうすればよいですか?(私は知っているBindingDynamicResource、適用できません。しかし、これは静的な値なので、どのように適用できますStaticResourcex: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

4

2 に答える 2

5

私はこのようにしてきた...

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);
    }
}

...そして、奇跡のように機能しています!!! これらのリソースは、同じ (部分的な) リソース ディクショナリで、またはこのような他のリソース ディクショナリから使用できます...

<Style ...>
    <Setter Property="FontSize"
            Value="{DynamicResource MediumFontSize}" />

    ...

</Style>

それが「良い習慣」であるかどうかはわかりません(これについてコメントしてください)、それが機能することだけを知っています..!!!

于 2010-02-04T07:48:12.310 に答える
0

この記事をチェックしてください:デフォルトのスタイルを上書きするそれはあなたが探しているものを持っているかもしれません。

于 2010-01-29T16:13:49.757 に答える