2008-09-08 2 views
11

다른 질문에 링크 된 Windows Vista UI 지침을 읽었으며 120 DPI로 전환해도 살아남을 수 있어야한다고 언급했습니다. 글쎄, 내 응용 프로그램과 함께 내 편리한 VM을 설치하고, 우리가 얻을 ... AAAAGH !!! 대규모 UI가 실패합니다!글꼴 크기에 영향을받지 않는 UI : 120 DPI로 전환하면 모든 것이 손상 되었습니까?

모든 것이 엉망입니다. 일부 컨테이너는 텍스트가 충분하지 않습니다. "서로의 옆에"놓인 몇몇 통제는 지금 함께 모두 찌그러 뜨려진다/흩어지고; 몇몇 단추는 충분히 키 크지 않습니다. 내 ListView 열이 충분하지 않습니다 ... eeek.

완전히 다른 접근 방식 인 것처럼 들립니다. 내 이전 버전은 기본적으로 VS2008 Windows Forms 디자이너를 사용하여 픽셀 기반 레이아웃을 만들었습니다. 윈도우 폼을 고수한다면 FlowLayoutPanel s가 도움이 될 것입니다.하지만 과거에는 그다지 융통성이 없었습니다. 또한 컨테이너 (예 : 양식 자체)가 충분히 크지 않은 문제를 해결하지 못합니다. 아마도 그럴 수있는 방법이 있을까요? 어쩌면 AutoSize 속성일까요?

이것은 WPF로 이동하는 시점이기도합니다. 나는 그것이 이런 종류의 것을 위해 특별히 설계되었다는 인상을 받고있다.

기본 문제는 아래로 다음에 오는 것 : 나는 사용자 설정에서 살아남을 수있는 글꼴 크기의 독립적 인 레이아웃을 달성하기 위해 모든 트릭이 무엇인지 윈도우 폼, 고수한다면

  • 자신의 글꼴 크기가 크거나 디스플레이를 120 DPI로 설정합니까?
  • 여기에 WPF가 큰 장점이 있습니까? 그렇다면 전환 할 가치가 있다는 것을 WPF에 확신시켜 주시겠습니까?
  • .NET 스택 또는 일반적으로 글꼴 크기에 독립적 인 레이아웃에 대한 일반적인 "모범 사례"가 있습니까?

답변

11

를 처리 할 수있는 앵커 속성이 컨트롤에 작동하는 방법에 대해 알아 떠나 가능한 경우에만 자동 크기 자체 일 수 있으며 가능한 경우 TableLayoutPanel을 사용합니다.

이러한 세 가지 작업을 수행하면 Windows Forms에서 많은 WPF 디자인 경험을 얻을 수 있습니다. 잘 디자인 된 TableLayoutPanel은 컨트롤이 제대로 모양에 맞게 조정되도록 최선을 다할 것입니다. AutoSize 컨트롤, 도킹 및 AutoScaleMode에 언급 된 Soeren Kuklau와 함께하면 잘 저울질 할 수 있어야합니다. 그렇지 않다면 폼에 너무 많은 컨트롤이있을 수 있습니다. 탭 페이지, 부동 도구 상자 또는 다른 일부 공간으로 분할하는 것을 고려하십시오.

WPF에서는 자동 크기 조정 컨트롤의 개념이 내장되어 있기 때문에 훨씬 쉽습니다. 대부분의 경우 좌표 쌍을 사용하여 WPF 요소를 배치하는 경우 잘못된 작업을 수행합니다. 여전히 낮은 해상도에서는 화면을 채우는 데 120 dpi의 텍스트를 많이 사용하지 않는다는 사실을 바꿀 수는 없습니다. 가끔 문제는 레이아웃이 아니라 작은 공간에 너무 많이 넣으려는 시도입니다.

+0

저는 항상 앵커, 독, AutoSize 및 TableLayoutPanels를 사용하여 크기를 조절할 수 있고 크기를 조정할 수있는 UI를 구현했습니다. 그러나 높은 DPI 설정에서 "XP 스타일 DPI 배율 조정"확인란을 선택하지 않으면 모든 응용 프로그램에 흐린 글꼴이 있음을 발견했습니다. 그걸 고치기위한 요령? –

+2

@romkyns : 응용 프로그램에 특별히 "high-dpi aware"라고 명시하지 않는 한, 다른 모든 버그가있는 응용 프로그램과 동일한 kludge fix를 얻을 수 있습니다. 현재 dpi를 요청할 때 앱이 거짓말을하고 (96이라고 말하면) 그래픽 카드가 양식을 확대하여 흐리게 만듭니다. 마이크로 소프트는 개발자들이해야 할 일을 포기하도록 포기했기 때문에 모든 사람들이 스케일링을 배제해야합니다. Google :'dpiAware' 매니페스트. –

4

나는 윈도우 폼을 고수한다면, 사용자가 자신의 글꼴을 큰 설정, 또는 120 DPI로 화면을 설정 살아남을 수있는 글꼴 크기의 독립적 인 레이아웃을 달성하기 위해 모든 트릭은 무엇인가?

AutoScaleMode은 친구 일 수 있습니다.

4

일반적으로 문제는 양식 레이아웃에 두 개의 다른 "상수"를 사용하고 다른 하나를 변경하지 않고 해당 상수 중 하나를 변경하는 것입니다.

양식 엔티티에 픽셀을 사용하고 글꼴 크기를 지정하기위한 포인트 (기본적으로 인치)를 사용하고 있습니다. 픽셀과 포인트는 DPI와 관련이 있으므로 DPI를 변경하면 갑자기 픽셀 고정 값이 포인트 고정 값과 일치하지 않습니다.

패키지 및 클래스가 있지만 하루가 끝날 때 하나의 단위 또는 다른 단위를 선택하거나 단위를 변경 상수에 따라 조정해야합니다.

개인적으로, 양식의 엔터티를 인치로 변경했습니다. 저는 C# 사용자가 아니기 때문에 이것이 기본적으로 지원되는지 또는 애플리케이션 시작시 동적 인 크기 조정을 수행해야하는지는 알 수 없습니다.

소프트웨어에서이 작업을 수행해야하는 경우 모든 작업을 정상적으로 수행하십시오 (보통 96 DPI).

응용 프로그램이 시작되면 양식을 표시하기 전에 시스템이 96 DPI인지 확인하십시오. 그렇다면 위대합니다. 그렇지 않은 경우 수정 요소를 사용하여 변수를 설정하고 양식을 표시하기 전에 각 항목의 크기와 변환 (위치와 크기를 수정)을 수행하십시오.

궁극적으로는 모든 것을 인치 또는 점 (1/72 인치)으로 지정하고 OS에서 처리하도록하십시오. 당신은 코너 케이스 (올바르게 DPI 몇 픽셀에서 응용 프로그램을 보여줄 것입니다 설정 야외 스크린 ...)

관련 문제