WPF - Как включить TextFormattingMode = "Display" для всех элементов управления в приложении? - PullRequest
10 голосов
/ 21 марта 2011

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

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

1 Ответ

10 голосов
/ 21 марта 2011

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

Если вы добавите этот стиль в свой Application.Resources, то он будет применяться ко всем ContentControl в вашем приложении, независимо от того, в каком Window находится элемент управления. Если вы определите его в 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));
        }
    }
}
...