WPF - Как включить TextFormattingMode = "Показать" для всех элементов управления в приложении?

В настоящее время я программирую WPF в Windows XP, где сглаживание визуализируется как текст размытия. Мы хотим сглаживать все приложение WPF, устанавливая TextOptions.TextFormattingMode для отображения. Приведенный ниже код решает проблему для всех пользовательских элементов управления и всего содержимого, но не для окон, которые мы открываем из приложения. Какой тип должен быть установлен в TargetType для покрытия всех элементов Window и User Control в приложении? Или есть ли лучшие способы сделать это?

<Style TargetType="{x:Type ContentControl}">
     <Setter Property="TextOptions.TextFormattingMode" Value="Display"></Setter>
</Style>

Ответ 1

Этот стиль будет применяться только к элементам управления типа ContentControl, он не будет применяться к типам, которые выводятся из ContentControl (т.е. кнопки, окна и т.д.). Вот как работают неявные стили.

Если вы поместите этот стиль в свой Application.Resources, он будет применяться к каждому ContentControl в вашем приложении, независимо от того, в каком окне находится элемент управления. Если вы определяете это в Resouces определенного окна, применяется только к ContentControls в этом окне.

Свойство TextOptions.TextFormattingMode наследуется, что означает, что вам нужно только установить его в верхней части визуального дерева. Итак, что-то вроде этого должно работать, если оно помещено в Application.Resources:

<Style TargetType="{x:Type Window}">
    <Setter Property="TextOptions.TextFormattingMode" Value="Display"></Setter>
</Style>

ИЗМЕНИТЬ:

Или вы можете применить это ко всем 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));
        }
    }
}