2011-01-13 3 views
11

저는 WPF 상호 운용성을 사용하여 WinForms 양식 내에서 WPF 사용자 컨트롤을 호스팅합니다. WPF 창에 간단한 레이블 여기에있다 -WPF 윈도우와 ElementHost 내부에서 텍스트가 다르게 렌더링됩니다.

<Label Content="Normal text" Name="labelNormal"/> 
    <Label Content="Bold text" Name="labelBold" FontWeight="Bold" /> 

:
WPF Window http://img525.imageshack.us/img525/7049/wpfwindow.png

- 그리고 WPF 사용자 정의 컨트롤은 윈폼에서 호스팅되는 경우 표시된 라벨 (label)을 모든 추한 텍스트 렌더링을 제외하고 OK 작동합니다 :
WPF Interop http://i51.tinypic.com/14j4xnc.jpg

interop 변형은 매우 다릅니다. 문자 간 간격은 0이며 텍스트는 순수 WPF 변형을 더 굵게 표시합니다. 정상적인 텍스트가 받아 들여지면 굵은 텍스트는보기 흉합니다.

해결 방법이 있습니까?

미리 감사드립니다.

답변

17

(편집 월 18는 폰트 렌더링 모드뿐만 아니라 글꼴 자체가 아니라 있다는 추가합니다.)이 개 해당 여기 요인이있다

: 글꼴 및 글꼴 서식 모드.

Windows Forms 호스트 응용 프로그램은 글꼴 크기가 8.25pt 인 "Microsoft Sans Serif"의 기본 글꼴 집합을 사용하고 있습니다. WPF의 측정 단위는 FontSize이고, 일반적으로 WPF는 다른 글꼴을 사용합니다. 기본 Aero 테마로 Windows 7을 실행하고 WPF는 FontSize12가있는 Segoe UI를 기본으로 설정합니다.

다른 결과가 나타나는 가장 큰 이유는 두 가지 글꼴입니다. UserControl 루트 요소에 FontFamily="Segoe UI" FontSize="12"을 추가하면 두 WPF 예제가 나에게 일관성있게 보입니다. (그러나 WPF 텍스트가 포함 된 Windows Forms 응용 프로그램의 텍스트와 일관성이 없어 보이게 할 것입니다. 그 이유가 ElementHost이 Windows Forms 글꼴 선택을 WPF 내용으로 전파하는 이유입니다.)

편집하기 전에 WPF 텍스트 렌더링을위한 IdealDisplay 모드의 차이점에 미치지 못한다고 생각했습니다. 폰트에 대한 내용이 대부분이지만, 더 이상이 경우라고 생각하지는 않습니다.하지만 WPF 텍스트를 자신의 Windows와 일관성있게 보이게하려는 사람들에게 여전히 유용하기 때문에이 다른 문제에 대한 논의는 여기서 끝내겠습니다. 양식 텍스트. WPF의 기본값은 Ideal이지만 Windows Forms 앱에서 실행중인 경우 틀림없이 Display이 더 좋을 것입니다. 이는 Windows Forms가 일반적으로 사물을 렌더링하는 방법과 일관되게 보이게하기 때문입니다.

이를 추가하여 당 요소를 기준으로 WPF에서 이것을 제어 할 수 있습니다

TextOptions.TextFormattingMode="Display" 

(또는 "Display"는 어떤 모드에 당신이 원하는 따라). 이 attachable 속성은 WPF v4에 추가되었으므로 첫 번째 릴리스 이후 WPF에서 확장 가능하지만 약간 흐릿한 텍스트 렌더링 중 하나를 선택하고 Win32 및 GDI + (및 Windows 양식) 사용. 그러면 적용한 요소와 모든 하위 요소에 영향을 미칩니다. 예를 들어 StackPanel에이 값을 설정하면 해당 패널의 모든 요소에 적용해야합니다 (자녀의 로컬 값을 다른 값으로 설정하지 않은 경우).)

기본적으로 WPF는 Win32 또는 GDI +보다 원본 서체 디자인에 대한 충실도를 유지하려고 시도합니다. 또한 텍스트를 일관되게 비율을 적용하는 방식으로 렌더링합니다. 글꼴 크기를 12 % 늘리면 텍스트의 너비가 화면에서 12 % 크게됩니다. Win32 나 GDI +에서는 좀 더 복잡한 비선형 변경이 발생하지 않습니다.

그러나 많은 사람들이 흐려짐에 대한 불만을 토대로 더 나은 충실도를 얻습니다. 그래서 WPF 4가 새로운 속성을 도입 한 이유입니다. Display으로 설정하여 충실도는 낮지 만 예리한 구식 렌더링을 얻으십시오.

요소 단위로 선택할 수 있기 때문에 굵은 체와 일반 텍스트가 독립적으로 보이는 모양을 선택할 수 있습니다.

+0

죄송합니다. 작성하지 않았습니다. TextFormattingMode 및 SnapsToDevicePixels을 시도했습니다. 호스트 된 UserControl에 대한 결과가 없습니다. –

+0

SnapsToDevicePixels가 도움이되지 않습니다. TextFormattingMode는 어디에 설정합니까? UserControl 또는 레이블에? (그리고 당신이 쓰지 않은 비트는 무엇입니까?) –

+0

UserControl과 Labels에서 두 가지 방법을 시도했지만 그 결과는 같습니다. 아무것도 바뀌지 않았다. –

관련 문제