2009-11-23 12 views
6

Silverlight 4.0では、すべてControlに特定のFontFamilyFontWeightを指定したいと思います。私はスタイルが今、特定のタイプのすべてのコントロールに適用することができることを知っているので、私はこれを試してみました:Silverlight 4のすべてのコントロールにFontFamilyを適用するベータ版

<Style TargetType="Control"> 
    <Setter Property="FontFamily" Value="Arial" /> 
    <Setter Property="FontWeight" Value="Bold" /> 
</Style> 

残念ながら、それが動作するように表示されません。しかし、私はControlから派生する型に対してこれを行うことができます。たとえば、TargetTypeからButtonに設定すると、アプリケーションのすべてのButtonにこれらの値が適用されます。

Controlベースクラスでこれを行うことができないのはなぜですか?

答えて

5

タイプシステムに接続されているコントロールスタイリングは、少し誤解を招く可能性があります。実際にはコントロールDefaultStyleKeyプロパティの値に基づいています。 Buttonの場合、値はtypeof(Button)であり、TextBoxの値はtypeof(Textbox)です。

TargetTypeの値がコントロールDefaultStyleKeyの値と等しい場合、デフォルトのスタイルがコントロールに適用されます。 のTypeTargetTypeの派生物であるかどうかの検討はない。

ほとんどのコントロールは、フォントプロパティの値を含むコンテキストから継承するため、フォント関連のプロパティは特殊なケースです。したがって、UserControl要素にFontFamilyFontWeightを指定することで、効果的に同じ結果を達成できます。

編集

OPによってコメントから: -

私は一つの場所でそれを設定し、そのスタイルを取るアプリケーション全体ですべてのユーザーコントロールを持つことができることを期待していました。

最も近いのは、アプリケーションリソースにキー付きスタイルを配置し、そのスタイルにすべてのユーザーコントロールをバインドすることです。もちろん、これはまだ各ユーザコントロールのためにいくつかの協力を必要としますが、少なくともフォントの選択肢は1つの場所に残ります。 app.xamlで例えば

: - その後、各ユーザーコントロールで

<Style x:Key="Common" TargetType="UserControl"> 
    <Setter Property="FontFamily" Value="Arial" /> 
    <Setter Property="FontWeight" Value="Bold" /> 
<Setter Property="Foreground" Value="Blue" /> 

: -

<UserControl ...namespace stuff here... 
    Style="{StaticResource Common}"> 
    <!-- ... content here ... --> 
+0

おかげで、それは理にかなっています。私は1つの場所に設定し、アプリケーション全体のすべてのUserControlにそのスタイルを適用させることを望んでいましたが、私は他のものをベースにカスタムUserControlを作ることができると思います。 –

1

私は視覚的な私のルートでいるfontFamilyを指定することによってそれを行います。明示的なFontFamilyが設定されていないすべての子コントロールは、ルートビジュアルからFontFamilyを派生します。

"über"ルートビジュアル(ポップアップ)でホストされているため、ChildWindowのみが余分なFontFamily設定を必要とします。これは助けになるでしょう

+0

あなたは設定を行うxamlは何ですか?ルートビジュアルはスタイルをとらない。 –

1

this.RootVisual = New MainPage(); 
(MainPage)this.RootVisual.FontFamily 
    = New System.Windows.Media.FontFamily(
    "/SLApplication;component/Fonts/segoeui.ttf#Segoe UI"); 
関連する問題