2011-05-08 4 views
3

캔버스 안에 그림과 텍스트가있는 간단한 웹 브라우저 WPF 테스트 응용 프로그램을 만들었습니다. 창은 96dpi로 설정되었습니다. WPF 높은 dpi 문제

그러면 I는 120 dpi로 전환하고 - I는 윈폼 사용할 경우 (((디스플레이 지저분는, 화상 사이즈가 변경 캔버스 부분보기 벗어나 ...

, 전 행 AutoScaleMode 속성을 설정 아무 것도없고 창은 크기와 컨트롤을 유지합니다. 글꼴을 계승 한 컨트롤은 흐리게 보이지 않고 너무 크게 보이지 않습니다.

W¨에서이 (좋은) 동작을 모방하려면 어떻게해야합니까? F?

답변

1

"웹 브라우저 WPF ... 응용 프로그램"이 무슨 뜻인지 명확하지 않습니다. WPF는 웹 브라우저에서 실행되지 않습니다. 부드러운 롤빵. 아니면 실버 라이트를하고 계십니까? 또는 브라우저 기반이 아닌 WPF 탐색 응용 프로그램입니까? 명확히해야합니다.

높은 DPI 모드로 실행하면 WPF가 자동으로 콘텐츠의 크기를 조정합니다. 이것은 의도 된 동작입니다 : 사용자가 명시 적으로 화면에 모든 것이 더 커지라고 말하면 WPF는 사용자의 희망을 존중합니다. 오래된 WinForms 해킹은 "높은 DPI를 사용하지 않는 것은 존재하지 않으며 보통의 작은 크기로 모든 것을 보여주고 사용자를 너무 많이 화나게하지 않기를 바란다"WPF에서는 사용할 수 없다. 당신이 그것에 익숙하다면 아마 그들을 에뮬레이션 할 수 있습니다. 그러나 당신은 옳은 일을하는 것에 대해 매우 강하게 조종됩니다.

WPF 저울 모든 내용이이므로 "캔버스의 일부가 보이지 않습니다"라는 문장은 의미가 없습니다. 캔버스, 부모 창 및 자식 요소를 모두 같은 크기로 조정해야하므로 모든 것이 96dpi에 적합하면 120dpi 및 144dpi로 맞춰야합니다. 그렇지 않다면 이상한 일을하고 있으며 문제를 재현하는 코드 샘플을 제공해야합니다.

높은 DPI 모드로 실행할 때 글꼴이 흐릿하다고 주장하는 것처럼 보입니다. 매우 이상하게 들릴 수 있습니다. 글꼴은 벡터로 렌더링되므로 높은 DPI 모드에서도 선명하게 렌더링하고 선명하게 렌더링해야합니다. 내가 묘사 한 모호한 글꼴은 본 적이 없으므로 다시 한 번 당신은 재현 사례를 제공해야 할 것입니다.

흐릿해질 것으로 예상되는 유일한 점은 이미지입니다. UI에서 래스터 (비트 맵) 이미지 (BMP/GIF/JPG/PNG)를 사용하는 경우 (예 : 툴바의 아이콘의 경우) 그렇다면 배율을 조정할 때 상당히 나 빠질 것입니다. 작은 비트 맵을 가져 와서 더 크게 만들면 거의 항상 나 빠진다. 더 큰 이미지를 사용하고 디스플레이 크기를 조정하여이 문제를 해결할 수 있습니다. 예를 들어 툴바 이미지를 16x16 (표준 96dpi 모드)로 설정하려면 32x32 비트 맵을 XAML에서 Image 요소의 Width = "16"및 Height = "16"을 설정하고 더 잘 보이는지 확인합니다. 실제로는 120dpi 모드에서는 20x20 픽셀, 144dpi 모드에서는 24x24입니다. 둘 다 32x32 리소스에서 크기가 축소되므로 크기를 늘려야하는 16x16 소스 이미지보다보기 편할 것입니다. . WPF 도구 모음에서이 기술을 시도하지는 않았으므로 일반적인 도구 모음 이미지로 실제로 얼마나 잘 작동하는지 잘 모르겠습니다.

스케일링 문제를 해결하는 가장 좋은 방법은 이미지는 래스터 대신 벡터 이미지를 사용하는 것입니다. 불행히도 벡터 이미지 라이브러리를 찾는 것은 어렵습니다. 일반적으로 비트 맵 이미지에서 찾을 수있는 것보다 훨씬 적고 일반적으로 비싸지 않은 경우가 많습니다.

+0

조, 저는 xbap을 말하고 있습니다. WPF에서 120 또는 144 dpi에 따라 ALL이 다시 그려진다는 것을 완전히 알고 있지만. 흐린 글꼴에 대해 유감스럽게 생각합니다. 사실, 비트 맵 이미지 내에 캡슐화 된 글자입니다 ... 나쁘다! 즉, 전체 사용자에게 맞는 96 dpi로 응용 프로그램을 그릴 때 다른 사용자가 144 dpi를 사용하면 응용 프로그램이 거의 보이지 않을 것입니다. 그래서 문제는 : 그는 스크롤바를 사용해야합니까, 아니면 전체 내용의 크기를 조정해야합니까? –

+0

1024x768 화면에 정확하게 맞도록 XBAP을 하드 코딩하려고합니다. 오르막길에 싸우고 있습니다. 각기 다른 툴바와 다른 크롬이 수직 공간의 양을 다르게하여 브라우저 버전이 다를 수 있습니다. 다른 Windows 설정 (제목 표시 줄 높이, 작업 표시 줄 높이, 작업 표시 줄이 고정되어있는 모니터의 어느 쪽인지)을 갖습니다. 다른 화면 해상도와 종횡비 (예 : 넓고 키가 크지 않은 와이드 스크린 모니터)는 말할 것도 없습니다. WPF의 레이아웃 기능을 사용하여 정상적으로 크기를 조정하는 UI를 디자인하는 것이 좋습니다. –

1

아마도 고정 길이 단위 (px)를 사용합니다. WPF 레이아웃 규칙을 염두에두고 프로젝트를 다시 레이아웃 해보십시오. This 페이지에 대한 몇 가지 모범 사례가 있습니다.

1

방금 ​​.NET에서 WPF로 MaxHeight을 사용하여 버그를 발견했습니다. 다른 스타일에서 상속 받고 사용자가 설정 한 DPI의 영향을받지 않는 StaticResource으로 사용되는 스타일로 설정된 스타일로 설정했습니다. MaxHeight에서 Height으로 설정 한 후 DPI의 영향을 받았습니다. .NET 4 (및 다른 프레임 워크)의 버그를 의심합니다.