2011-05-02 2 views
8

WPF GUI를 Windows 글꼴 크기 옵션 (DPI)으로 확장하지 않겠습니다. Scaling이 이미지와 테두리를 UserControl에 적용하기 때문에 UserControl에서 고정 된 글꼴 크기를 지정하는 문제가 아닙니다. Scalling 기능을 끄기 위해 UserControl에서 설정할 수있는 속성이 있습니까? 그렇지 않다면 어떻게 할 수 있습니까?WPF가 Windows 글꼴 크기 옵션을 사용하여 크기 조정하지 못하도록하려면?

+3

해상도 독립성은 WPF의 핵심 아이디어 중 하나입니다. 이 기능을 해제하는 것은 좋은 생각이 아닙니다. 특히 UI의 일부에만 영향을주는 경우에는 특히 좋습니다. 다양한 컴퓨터에서 실제로 사용되는 DPI 범위가 증가 할뿐 아니라 거대한 픽셀 밀도의 디스플레이가 이미 진행 중입니다. –

+2

일반적으로 나는 당신의 의견에 동의합니다. 그러나이 경우 UserControl은 확장이 구현되지 않은 기존 Windows Forms 응용 프로그램에서 호스팅되므로 실제로 스케일링을 해제해야합니다. 결과적으로 큰 글꼴과 고정 된 글꼴이있는 응용 프로그램의 일부가있는 응용 프로그램의 일부가 있습니다. Windows Forms 응용 프로그램의 나머지 부분에서 Windows 글꼴 설정을 지원하는 것은 현재 실행 가능하지 않습니다. – Sylvain

+1

그 의미가 맞는 것 같습니다. +1. –

답변

1

DpiDecorator 이외에도 항목의 글꼴 크기를 수정해야합니다. 예를 들어, Windows XP에서 설정을 큰 글꼴로 설정하면 메뉴 항목 글꼴 크기가 14로 설정되고 DPI 설정을 사용하여 크기가 조정되므로 MenuItem 글꼴 크기 나 다른 UI 항목을 수정하지 않은 경우 글꼴의 경우이 항목 유형에 대한 Window의 기본값을 가져옵니다.

하는 오프 두십시오 (: 또한 사용자가 수동으로

8

현재 DPI 설정에 따라 UserControl의 크기를 줄일 수 있습니다.

public class DpiDecorator : Decorator { 

    public DpiDecorator() { 
     this.Loaded += (s, e) => { 
      Matrix m = PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice; 
      ScaleTransform dpiTransform = new ScaleTransform(1/m.M11, 1/m.M22); 
      if (dpiTransform.CanFreeze) 
       dpiTransform.Freeze(); 
      this.LayoutTransform = dpiTransform; 
     }; 
    } 

} 

을 또는 당신은 당신의 UserControl에 그 논리를 움직일 수 : 다음 DpiDecorator하여 UserControl을 감싸 예를 들어, 다음에 관계없이 DPI 설정과 동일하게 보일 것입니다.

DPI 배율을 얻는 코드는 blog post입니다.

+0

이것은 완벽하게 작동합니다! –

2

Windows가 높은 dpi의 설정에서 실패 버그 애플리케이션을위한 호환성 도우미를 포함 ... 다른 항목에 대한 글꼴 크기/글꼴을 변경할 수 있습니다 기억

enter image description here

을 그리고 당신의 응용 프로그램이 어셈블리 매니페스트에서 "dpiAware"항목이 없다면 확인 : 또는 "사용 윈도우 XP 스타일 DPI는 스케일링") 해제합니다.

Windows는 응용 프로그램에 거짓말을하고 그것이 96dpi라고 말하면 그래픽 카드가 전체 창을 확장합니다.

모든 것이 약간 퍼지기 때문에 일반적으로 사용하기가 좋지 않지만 버그가있는 WinForm 컨트롤을 고칠 수있을 때까지는 충분히 잘 작동합니다.

참고 :dpiAware 매니페스트 항목은 응용 프로그램이이 dpi로 스케일링의 탈퇴에 싶어 윈도우를 말할 수 있습니다. 응용 프로그램은 높은 dpi로 테스트 한 경우에만이 항목을 추가합니다.