2011-12-07 6 views
1

私の意図は、電話のテーマを無効にすることです。デフォルトのページのマークアップは次のコードいるで:ページ内のすべてのコントロールに継承されるフォント、背景などを設定するにはどうすればよいですか?

<phone:PhoneApplicationPage 
FontFamily="{StaticResource PhoneFontFamilyNormal}" 
FontSize="{StaticResource PhoneFontSizeNormal}" 
Foreground="{StaticResource PhoneForegroundBrush}" 

を私はスタイル参照に置き換えます

<Application.Resources> 
    <Style x:Key="stylePage" TargetType="phone:PhoneApplicationPage"> 
     <Setter Property="Background" Value="White" /> 
     <Setter Property="Foreground" Value="DeepSkyBlue" /> 
     <Setter Property="FontFamily" Value="Arial" /> 
    </Style> 
</Application.Resources> 

しかし、背景はまだです:

<phone:PhoneApplicationPage 
Style="{StaticResource stylePage}"  

スタイルは、このようなアプリのリソースに定義されています黒、フォントは白です。デバッガは値が適用されたことを示します。 VisualRootの背景を設定すると、それが適用されますが、すべてのコントロールでデフォルトで使用されるfontfamilyとforegroundの値を設定します。出来ますか?

答えて

2

this msdn articleによると、Silverlightのビジュアルツリーでは、FontFamily、FontSize、FontStretch、FontStyle、FontWeight、およびForegroundの各プロパティのみが継承されます。通常、依存関係のプロパティはSilverlightで継承されません(WPFでよく使用されます)。これはおそらく、これらがthe Silverlight MSDN article on dependency property value precedenceに記載されていないが、記事のthe WPF versionには、継承された値がローカルの値またはスタイルのセッターよりも低い優先度が記述されています。あなたのソリューションは実際にはある程度機能しますが、デフォルトでは、ほとんどのコントロールにはスタイルで設定されたフォントプロパティがあります。デフォルトのスタイルでボタンが使用され、ページテンプレートのTextBlockにはPhoneTextNormalStyleまたはPhoneTextTitle1Styleが使用されます。 TextBlockのスタイルを設定するXML属性を削除すると、アプリケーション全体のフォントプロパティがTextBlockに適用されます。

残念ながら、背景依存プロパティは継承されないため、背景はそのままです。

ボタンやその他のコントロールのデフォルトのスタイルでは、適切なシステムスタイルを使用して明示的にTextBlockのスタイルを定義するため、アプリケーション全体のプロパティはTextBlocks(Buttonなど)より複雑なコントロールでは機能しません。

あなたのコントロールのスタイルで独自のリソースディクショナリを作成し、コントロールに手動で適用する必要があります。そうでなければ、実行時にこれらのプロパティを自動的に置き換えるコードを書く必要があります。

+0

ありがとうございました。それが私がそれを疑った方法ですが、もっと簡単な方法があることを望みました。 –

関連する問題