質問
私は、WPFアプリケーションを作成していると私は、UIのすべての要素のフォントサイズを変更できるようにする最善の方法を知っていただきたいと思います。私は、リソースディクショナリを作成し、私が使用するすべてのコントロールのフォントサイズを設定するには、スタイルを設定しますか?
のベストプラクティスは何ですか?
解決
私はそれをこのようにしてくださいます:
<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プロパティは、あなたも基本スタイルを拡張することができるものです)
他のヒント
FontSizePropertyは親Controlから継承されます。だから、あなたは自分のメインウィンドウののFontSizeを変更する必要があります。
あなたは動的挙動を必要としない場合、これは動作するはずます:
あなたのResourceDictionaryにウィンドウのスタイルを追加します。
<Style TargetType="{x:Type Window}">
<Setter Property="FontSize" Value="15" />
</Style>
(そのA派生型ので、暗黙的に適用されません)あなたのメインフォームにスタイルを適用します。
Style = (Style)FindResource(typeof (Window));
別のオプションは、資源としてのfontFamilyとのFontSizeを定義することです。
<FontFamily x:Key="BaseFontFamily">Calibri</FontFamily>
<sys:Double x:Key="BaseFontSize">12</sys:Double>
こうすることで、あなたのセッターでそれらを使用することができます。
<Window>
は、プロパティのFontSizeを持っています。
ですから、要素内の所望のフォントサイズを設定することができます。
<Window FontSize="12">
</Window>
Application.Current.MainWindow.FontSize = _appBodyFontSize;
あなたはまた、実行時にフォントサイズを変更することができます。 この方法
TextElement.FontSize
は、あなたは、単にルート要素のフォントサイズを設定することができることを意味継承プロパティは、であり、すべての子要素は、そのサイズを使用します(あなたがそれらを変更しない限り、手動で)
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" />
あなたがプログラムで静的(XAML)、すべてのウィンドウに対して一度適用されるべきではないグローバルのFontSizeを変更する必要がある場合は、あなたが行うことができます:
TextElement.FontSizeProperty.OverrideMetadata(
typeof(TextElement),
new FrameworkPropertyMetadata(16.0));
TextBlock.FontSizeProperty.OverrideMetadata(
typeof(TextBlock),
new FrameworkPropertyMetadata(16.0));
それが明示的なのFontSizeが定義されていないのに対し、この値は、任意のTextBlockの、ラベルおよび任意のWindowsのほぼすべてのテキストに適用されます。しかし、これは、あなたがそれやその他の特別なコントロールのようなコードを記述する必要があり、テキストボックスのためには影響しません。
動的にCTRL-マウスホイールでグローバルにフォントサイズを変更するには:
XAMLます:
<Window Name="MainWindow" ... PreviewMouseWheel="MainWindow_PreviewMouseWheel">
の後ろのコード:
private void MainWindow_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if ((Keyboard.Modifiers & ModifierKeys.Control) != 0)
{
if (e.Delta > 0)
++mainCtrl.FontSize;
if (e.Delta < 0 && mainCtrl.FontSize > 1)
--mainCtrl.FontSize;
}
}