簡體   English   中英

如何為WPF應用程序設置默認字體?

[英]How to set the default font for a WPF application?

我希望能夠為WPF應用程序定義字體系列。 最好使用資源字典作為從App.xaml引用的主題。 我嘗試過如下創建Style

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

但這是行不通的。 將類型設置為TextBlock可以用於大多數控件,但是有一些控件不適用。

我知道您可以在窗口上設置字體,並使該窗口的所有子控件繼承字體。 但是我認為所有對話框窗口都將恢復為默認字體,而這並不是我想要的。

有任何想法嗎?

假設Window子類沒有覆蓋DefaultStyleKey ,則可以將其簡單地添加到Window樣式中,因為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對象完成初始化后,在其中指定的Window樣式將成為所有窗口的默認樣式。

大多數建議的解決方案都不適合我。 我的簡單解決方案:

將此添加到App.xaml:

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

將其添加到您的MainWindow構造函數中(在InitializeComponent之后):

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

一種簡單的編程方式:

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

我找到了這個 :

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>

App.xaml嘗試以下簡單的解決方法(不需要任何代碼):

<SolidColorBrush x:Key="ForeBrush" Color="Blue" />

<Style x:Key="GenericTextStyle">
    <!-- Generic control forecolor definition -->
    <Setter Property="Control.Foreground" Value="{StaticResource ForeBrush}" />

    <!-- Add a definition for each unworking nested control -->
    <Style.Resources>
        <Style TargetType="{x:Type Label}">
            <Setter Property="Foreground" Value="{StaticResource ForeBrush}" />
        </Style>
    </Style.Resources>
</Style>

只需將您的Windows樣式綁定到此即可。 非常適合我。 嵌套樹中僅需要定義一些屬性。 例如,屬性FontSize只能在通用部分中指定。

我不知道為什么要這樣做。 很奇怪,因為Label應該從Control派生。 有人對此有想法嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM