[英]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.