2013-01-17 8 views
6

App.xamlでFontFamilyを設定して、宣言的にそのスタイルを必要に応じて適用できるようにする方法を考えています。私のようなものに適用することができますResourceDictionaryで :私は、何をしたいのかFontFamilyをStaticResourceとして保存するには?

<System:Double x:Key="SmallTextSize">10</System:Double> 

のようなものです:

<FontFamily x:Key="MainFont">Wingdings</FontFamily> 

しかし、私は仕事に行くことができる唯一のことは、暗黙的なスタイルで、どのターゲットと、使用したいフォントの複数の宣言が必要です。私は最後のスタイルを任意のコントロールのFontFamilyプロパティに適用できるようにする必要があります。

ここで私は現在、来ることができる最も近いです。

<System:String x:Key="MainFont">Wingdings</System:String> 
<Style TargetType="UserControl"> 
     <Setter Property="FontFamily" Value="{StaticResource MainFont}"></Setter> 
</Style> 

それはMainFontはない文字列のfontFamily、ことを期待しているため、この実装では、のようなものでは動作しません:

<TextBlock Text="{Binding}" Margin="0,0,0,4" FontWeight="Normal" FontFamily="{StaticResource MainFont}" FontSize="14.667" /> 

どのようにすべきです私はこれを扱う?ありがとう!

+0

もっと適切な答えが見つからない場合は、次のような回避策があります:添付された依存関係プロパティを使用して 'FontFamily'を設定してください。 ''のようなものが得られます。 –

+0

ありがとうございますが、それは私が進めていることとはまったく反対です。私は非常に大きなSilverlightアプリケーションでスタイルを統合しようとしています。そのレベルでスタイルを適用すると何千もの編集が行われます。 –

+0

私は何かが足りないかもしれませんが、上の例のようにフォントを設定しようとすると、それは 'FontFamily =" {StaticResource MainFont} "'であり、まったく同じ数の編集が必要になります。 –

答えて

11

私はこれを完全に理解しています。

<FontFamily x:Key="MainFont">WingDings</FontFamily> 

あなたはその後、それぞれにそれを宣言することなく、複数のインスタンスに適用することについて話している場合、私はちょうど好きです。

<Object> 
    <Object.Resources> 
     <Style TargetType="TextBlock" BasedOn="{StaticResource YourDefaultTextBlockStyleToInheritOtherProperties}"> 
     <Setter Property="FontFamily" Value="{StaticResource MainFont}"/> 
     </Style> 
    </Object.Resources> 

    <!-- Your FontFamily automatically gets inherited to all children of the object 
     whether your object is say a Grid, or StackPanel, 
     or even an entire UserControl -->  
    <TextBlock Text="ABCDEFG"/> 
    <TextBlock Text="12345"/> 
    <TextBlock Text="!()*&@#"/> 

</Object> 
+0

私の混乱はトップ宣言から発生すると思います。これは、 'FontFamily 'のデフォルトのコンストラクタが存在しないという警告を表示しますが、明らかにそれは動作します。 –

+0

デフォルトのコンストラクタはありませんか?ハハ、何?ここにペーストしてください。ソートされます。 –

+0

私のApp.xamlでは ' Wingdings'は "デフォルトコンストラクタが見つかりませんでした"という警告を私に伝えますが、投稿した内容を見た後、スタイル、そしてloと見て、それは働いた。 VS2012が私に警告を与えている理由はわかりません。 –

関連する問題