chr*_*sva 10 wpf antialiasing wpf-controls
我目前正在Windows XP上编写WPF,其中抗锯齿呈现为blury文本.我们希望通过将TextOptions.TextFormattingMode设置为Display来对整个WPF应用程序进行消除锯齿.下面的代码解决了所有用户控件及其所有内容的问题,但不适用于我们从应用程序打开的窗口.我应该在TargetType中设置什么类型来覆盖应用程序中的所有Window和User Control元素?或者有更好的方法来做到这一点?
<Style TargetType="{x:Type ContentControl}">
<Setter Property="TextOptions.TextFormattingMode" Value="Display"></Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
Cod*_*ked 10
该样式仅适用于ContentControl类型的控件,它不会应用于从ContentControl派生的类型(即Button,Window等).这就是隐式Styles的工作原理.
如果您将该Style放在Application.Resources中,那么它将应用于应用程序中的每个ContentControl,而不管控件所在的Window.如果您在特定Window的Resouces中定义它,那么它只会被应用到该窗口中的ContentControls.
该TextOptions.TextFormattingMode属性是继承的,这意味着你只需要在视觉树的顶端设置它.所以这样的东西应该可以工作,如果放在Application.Resources中:
<Style TargetType="{x:Type Window}">
<Setter Property="TextOptions.TextFormattingMode" Value="Display"></Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
编辑:
或者您可以通过覆盖默认值来将此应用于所有Windows,甚至是派生类型:
using System.Windows;
using System.Windows.Media;
namespace MyProject
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application {
static App() {
TextOptions.TextFormattingModeProperty.OverrideMetadata(typeof(Window),
new FrameworkPropertyMetadata(TextFormattingMode.Display, FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.Inherits));
}
}
}
Run Code Online (Sandbox Code Playgroud)