2011-03-21 15 views
10

Actualmente estoy programando WPF en Windows XP donde el suavizado se representa como texto blury. Queremos anti-aliasing en toda la aplicación WPF al configurar TextOptions.TextFormattingMode para mostrar. El siguiente código resuelve el problema para todos los controles de usuario y todo su contenido, pero no para las ventanas que abrimos desde la aplicación. ¿Qué tipo debo configurar en TargetType para cubrir todos los elementos de Ventana y Control de usuario en la aplicación? ¿O hay mejores formas de hacer esto?WPF - Cómo habilitar TextFormattingMode = "Mostrar" para todos los controles en la aplicación?

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

Respuesta

10

ese estilo sólo se aplica a los controles de tipo ContentControl, no se aplicará a los tipos que se derivan de ContentControl (es decir Botón, Ventana, etc). Así es como funcionan los Estilos implícitos.

Si coloca ese estilo en sus Application.Resources, se aplicaría a cada ContentControl en su aplicación, independientemente de en qué ventana esté el control. Si define eso en los recursos de una ventana específica, entonces solo se aplicaría a ContentControls en esa ventana.

La propiedad TextOptions.TextFormattingMode es heredada, lo que significa que solo necesita establecerla en la parte superior del árbol visual. Así que algo como esto debería funcionar, si se colocan en los Application.Resources:

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

EDIT:

O usted podría aplicar esto a todos los Windows, incluso los tipos derivados, reemplazando el valor por defecto de este modo:

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)); 
     } 
    } 
} 
+2

El estilo en esta publicación en realidad no funciona por la misma razón que el estilo ContentControl no funciona. El tipo de ventana en el estilo debe ser la clase específica que su aplicación utiliza para la ventana. (Normalmente se deriva de Window). En ese punto, también podría establecer la propiedad TextOptions en el XAML para Window, ya que solo funcionará en ese tipo de todos modos. Idealmente, habría una solución que lo aplicaría a todas las ventanas, independientemente del tipo, para que cubriera cosas como ventanas emergentes y cosas por el estilo. ¿Alguna idea adicional? – MrSlippers

+0

@MrSlippers - Buen punto, actualicé mi respuesta con otra opción. – CodeNaked

Cuestiones relacionadas