web-dev-qa-db-ja.com

WPFアプリケーションのデフォルトフォントを設定するにはどうすればよいですか?

WPFアプリケーションのフォントファミリを定義できるようにしたい。できれば、App.xamlから参照されるテーマとしてリソースディクショナリを使用してください。次のようにStyleを作成してみました。

<Style TargetType="{x:Type Control}">
    <Setter Property="FontFamily" Value="Segoe UI" />            
</Style>

しかし、これは機能しません。タイプをTextBlockに設定すると、ほとんどのコントロールで機能しますが、これが適用されないコントロールがいくつかあります。

ウィンドウにフォントを設定し、そのウィンドウのすべての子コントロールにフォントを継承させることができます。しかし、ダイアログウィンドウはデフォルトのフォントに戻ると思いますが、これはまさに私が望むものではありません。

何か案は?

70
Jakup

WindowサブクラスがDefaultStyleKeyをオーバーライドしないと仮定すると、TextElement.FontFamilyPropertyは継承されたプロパティです。

<Style TargetType="{x:Type Window}"> 
    <Setter Property="FontFamily" Value="Segoe UI" />             
</Style> 

InitializeComponent呼び出しの後に、Appコンストラクターに次を追加する必要もあります。

FrameworkElement.StyleProperty.OverrideMetadata(typeof(Window), new FrameworkPropertyMetadata
{
    DefaultValue = FindResource(typeof(Window))
});

仕組み:Appオブジェクトの初期化が完了すると、そこに指定されたウィンドウスタイルがすべてのウィンドウのデフォルトスタイルになります。

55
Ray Burns

提案されたソリューションのほとんどは私にとってはうまくいきませんでした。私の簡単な解決策:

これをApp.xamlに追加します。

<Style TargetType="{x:Type Window}">
    <Setter Property="FontSize"
            Value="14" />
</Style>

これをMainWindowコンストラクターに追加します(InitializeComponentの後):

Style = (Style)FindResource(typeof(Window));
24
Jowen

プログラムでそれを行う簡単な方法:

public MainWindow()
{
    this.FontFamily = new FontFamily("Segoe UI");
}
10
Strong

私はこれを見つけました :

TextElement.FontFamilyProperty.OverrideMetadata(
typeof(TextElement),
new FrameworkPropertyMetadata(
    new FontFamily("Comic Sans MS")));

TextBlock.FontFamilyProperty.OverrideMetadata(
typeof(TextBlock),
new FrameworkPropertyMetadata(
    new FontFamily("Comic Sans MS")));

実際、ここで他の回答のいくつかを組み合わせた完全なXAMLソリューションを取得できます。

メインウィンドウの名前がWinMain(他のすべてのウィンドウより先に読み込むウィンドウ)の場合、たとえば、スタイルという名前の参照を追加します。 WinAll

<Window x:Class="MyNamespace.WinMain"
    xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.Microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Title="WinMain" Height="450" Width="800"
    Style="{StaticResource WinAll}">

そして、あなたのスタイルをこのように定義します

<Style x:Key="WinAll" TargetType="{x:Type Window}">
    <Setter Property="FontFamily"
        Value="Comic Sans MS" />
    <Setter Property="FontSize"
        Value="14" />
</Style>
2
Francesco B.