如果您想设置一次并保留它,只需在 <ResourceDictionary> 标记内的 App.xaml 中添加样式:
<ResourceDictionary>
...
<Style TargetType="{x:Type Window}">
<Setter Property="TextOptions.RenderingMode" Value="ClearType">
</Style>
...
</ResourceDictionary>
如果您真的希望能够随时间改变它,您可以绑定到主窗口:
<ResourceDictionary>
...
<Style TargetType="{x:Type Window}">
<Setter Property="TextOptions.RenderingMode" Value="{Binding MainWindow.(TextOptions.RenderingMode), Source="{x:Static Application.Current}">
</Style>
...
</ResourceDictionary>
并确保在主窗口中明确设置以避免自引用:
<Window TextOptions.RenderingMode="ClearType" ...>
现在对主窗口的 TextOptions.RenderingMode 的任何动态更改也会影响所有其他窗口。但简单的固定样式最适合大多数用途。
如果您不关心它由主窗口的值控制,还有其他动态绑定它的解决方案,例如您可以在您的样式中使用{DynamicResource ...} 或绑定到静态对象的属性。
更新
如果您使用的是 Window 子类而不是普通的 Window 对象,则仅在 App.xaml 中为 Window 添加样式是行不通的。
要允许您定义的样式应用于所有 Window 子类,请将以下 OverrideMetadata 调用添加到您应用的构造函数(通常在 App.xaml.cs 中) InitializeComponent() 之后: p>
public App()
{
InitializeComponent();
FrameworkElement.StyleProperty.OverrideMetadata(typeof(Window), new FrameworkPropertyMetadata
{
DefaultValue = FindResource(typeof(Window))
});
}