2011-03-21 4 views
10

현재 Windows XP에서 WPF를 프로그래밍하고 있는데 앤티 앨리어싱이 희미한 텍스트로 렌더링됩니다. TextOptions.TextFormattingMode를 Display로 설정하여 전체 WPF 응용 프로그램에 앤티 앨리어싱을 적용하려고합니다. 아래의 코드는 모든 사용자 컨트롤과 모든 내용에 대한 문제를 해결하지만 응용 프로그램에서 여는 창은 해결하지 않습니다. 애플리케이션의 모든 윈도우 및 사용자 정의 컨트롤 요소를 처리하기 위해 어떤 유형을 TargetType에 설정해야합니까? 아니면 이것을 할 수있는 더 좋은 방법이 있습니까?WPF - TextFormattingMode 활성화 방법 = 응용 프로그램의 모든 컨트롤에 대해 "표시"?

해당 스타일 전용 형은 ContentControl의 제어에 적용되는
<Style TargetType="{x:Type ContentControl}"> 
    <Setter Property="TextOptions.TextFormattingMode" Value="Display"></Setter> 
</Style> 

답변

10

, 그것은 ContentControl을 (즉, 버튼, 윈도우 등)로부터 유도 유형에 적용되지 않는다. 그것은 암묵적인 스타일이 작동하는 방법입니다.

해당 스타일을 응용 프로그램 리소스에 넣으면 해당 컨트롤이있는 창에 관계없이 응용 프로그램의 모든 ContentControl에 적용됩니다. 특정 Window의 Resouces에서 정의하면 해당 Window의 ContentControl에만 적용됩니다.

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

이 게시물의 스타일은 실제로 ContentControl 스타일이 작동하지 않는 것과 같은 이유로 작동하지 않습니다. 스타일의 창 유형은 응용 프로그램이 창에 사용하는 특정 클래스 여야합니다. (일반적으로 Window에서 파생됩니다.)이 시점에서 Window 자체에 대한 XAML의 TextOptions 속성을 설정할 수도 있습니다.이 메서드는 해당 형식에서만 작동하기 때문에 Window 자체에서 TextOptions 속성을 설정할 수도 있습니다. 이상적으로는 유형에 관계없이 모든 창문에 적용하는 솔루션이있어 팝 아웃 창과 같은 것들을 덮을 수 있습니다. 더 이상의 아이디어? – MrSlippers

+0

@ MrSlippers - 좋은 지적으로 다른 대답으로 답변을 업데이트했습니다. – CodeNaked

관련 문제