【问题标题】:WPF - How to Enable TextFormattingMode="Display" for all controls in the application?WPF - 如何为应用程序中的所有控件启用 TextFormattingMode="Display"?
【发布时间】:2011-03-21 11:17:27
【问题描述】:

我目前在 Windows XP 上编写 WPF,其中抗锯齿呈现为模糊文本。我们希望通过将 TextOptions.TextFormattingMode 设置为 Display 来消除整个 WPF 应用程序的锯齿。下面的代码解决了所有用户控件及其所有内容的问题,但不适用于我们从应用程序打开的窗口。我应该在 TargetType 中设置什么类型以覆盖应用程序中的所有 Window 和 User Control 元素?还是有更好的方法来做到这一点?

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

【问题讨论】:

    标签: wpf wpf-controls antialiasing


    【解决方案1】:

    该样式将仅应用于 ContentControl 类型的控件,它不会应用于派生自 ContentControl 的类型(即 Button、Window 等)。这就是隐式样式的工作原理。

    如果您将该 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>
    

    编辑:

    或者您可以通过像这样覆盖默认值来将其应用于所有 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));
            }
        }
    }
    

    【讨论】:

    • 这篇文章中的样式实际上不起作用,原因与 ContentControl 样式不起作用的原因相同。样式中的 Window 类型需要是您的应用程序用于该窗口的特定类。 (它通常是从 Window 派生的。)此时,您不妨在 XAML 中为 Window 本身设置 TextOptions 属性,因为无论如何它只能在该类型上工作。理想情况下,将有一个解决方案将其应用于所有类型的窗口,以便它可以覆盖诸如弹出窗口之类的东西。还有什么想法吗?
    • @MrSlippers - 好点,我用另一个选项更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多