私はWPFアプリケーションを作成していますが、私はUIの各要素のフォントサイズを変更できる最良の方法を知りたいと思います。リソース辞書を作成し、使用するすべてのコントロールのフォントサイズを設定するスタイルを設定しますか?WPFグローバルフォントサイズ
ベストプラクティスは何ですか?
私はWPFアプリケーションを作成していますが、私はUIの各要素のフォントサイズを変更できる最良の方法を知りたいと思います。リソース辞書を作成し、使用するすべてのコントロールのフォントサイズを設定するスタイルを設定しますか?WPFグローバルフォントサイズ
ベストプラクティスは何ですか?
私はそれをこれを行うと思いますway:
<Window.Resources>
<Style TargetType="{x:Type Control}" x:Key="baseStyle">
<Setter Property="FontSize" Value="100" />
</Style>
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource baseStyle}"></Style>
<Style TargetType="{x:Type Label}" BasedOn="{StaticResource baseStyle}"></Style>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource baseStyle}"></Style>
<Style TargetType="{x:Type ListView}" BasedOn="{StaticResource baseStyle}"></Style>
<!-- ComboBox, RadioButton, CheckBox, etc... -->
</Window.Resources>
そういう意味で、すべてのコントロールを変更したいのであれば、 "baseStyle"スタイルを変更するだけで、残りはそれから継承されます。 (継承されたスタイルの中に他のセッターを作成する場合は、BasedOnプロパティを継承しているので、ベーススタイルを拡張することもできます)
WPFのどのスタイルでも、アプリケーションのスタイルを含む別のリソース辞書が必要です。
アプリ全体で再利用される単一のフォントサイズを使用する場合は、そのフォントサイズのスタイルを作成するだけです。明示的に使用する一意の名前/キーを指定することも、アプリ全体で超越するtargetTypeを設定することもできます。
キー明示:
<Style
x:Key="MyFontSize"
TargetType="TextBlock">
<Setter
Property="FontSize"
Value="10" />
</Style>
<Control
Style="{StaticResource MyFontSize}" />
*このスタイルは、アプリ内のすべてのテキストブロックについてはcontentPresenters
を持つコントロールで使用することができます。
<Style
TargetType="TextBlock">
<Setter
Property="FontSize"
Value="10" />
</Style>
<TextBlock
Text="This text will be size 10" />
FontSizePropertyは親コントロールから継承されます。したがって、メインウィンドウのFontSizeを変更するだけで済みます。
あなたは、これは動作するはず動的挙動を必要としない場合:
そのため、(暗黙的に適用されることはありません、あなたのメインフォームにスタイルを適用し、あなたのResourceDictionaryに
<Style TargetType="{x:Type Window}">
<Setter Property="FontSize" Value="15" />
</Style>
をウィンドウのスタイルを追加します。派生型)
Style = (Style)FindResource(typeof (Window));
This解決策としてマークされた答えよりも優れた練習のように聞こえる。私はこれと一緒に行きます、どんな場合でも、それはずっと少ないコードです。 –
編集:(フレームワーク4.5の場合は)機能しません。 –
@ KoertvanKleef - .NET 4.5で動作しますが、どのような問題が発生していますか? – joshcomley
あなたがプログラムですべてのウィンドウに対して一度適用されるグローバルのFontSize、ない静的(XAML)を、変更する必要がある場合は、あなたが行うことができます:
TextElement.FontSizeProperty.OverrideMetadata(
typeof(TextElement),
new FrameworkPropertyMetadata(16.0));
TextBlock.FontSizeProperty.OverrideMetadata(
typeof(TextBlock),
new FrameworkPropertyMetadata(16.0));
それは明示的なのFontSizeが定義されていないのに対し、この値は、任意のTextBlockの、ラベルおよび任意のWindowsのほぼすべてのテキストに適用されます。しかし、これはTextBoxには影響しません、あなたはそれや他の特別なコントロールのために同様のコードを書く必要があります。
もう一つの選択肢は、FontFamilyとFontSizeをリソースとして定義することです。あなたがセッターにそれらを使用することができる方法
<FontFamily x:Key="BaseFontFamily">Calibri</FontFamily>
<sys:Double x:Key="BaseFontSize">12</sys:Double>
。
Application.Current.MainWindow.FontSize = _appBodyFontSize;
あなたはまた、実行時にフォントサイズを変更することができますこの方法。
TextElement.FontSize
は、あなたは、単にルート要素のフォントサイズを設定することができることを意味継承財産であり、かつ、すべての子要素は
重要:「手動で変更しない限り」フォントの継承が親のために手動で設定されているので、それは私には時間がかかりました。 –
<Window>
が持っている(あなたがそれらを手動で変更しない限り)そのサイズを使用しますプロパティFontSize。
したがって、そのウィンドウ内のすべての要素のフォントサイズを変更する場合は、要素に希望のフォントサイズを設定できます。
<Window FontSize="12">
</Window>
そして、あなたはその場でフォントサイズを変更する必要がある場合は、それらのすべてがスタイルにし、「baseStyle」へのスタイルの参照の両方で、DynamicResourceに宣言されていることを確認してください。 –
Seroiouslly?私はそれをやってみたが、私はこのエラーが発生します:プロパティ 'BaseOn'は 'DynamicResourceExtension'型の値をサポートしていません。私はStaticResourceからDynamicResourceにコードを変更しました。あなたは何が欠けていると思いますか? – Carlo
その小さな問題を忘れてしまった。私たちは、Settersがコントロールごとに宣言して、巨大な階層を持たないように、すべての宣言を設定しました。この投稿はそれをとてもうまく説明しています。 http://stackoverflow.com/questions/585429/using-basedon-style-property-on-dynamicresources –