2010-03-15 6 views
7

Moja aplikacja .NET (VB.NET 3.5, jeśli naprawdę musisz wiedzieć) formularze nie są poprawnie formatowane, gdy są renderowane przy ustawieniach wysokich DPI. Wszystkie poprawki, które do tej pory znalazłem, wyjaśniają przyczynę problemu, ponieważ "niektóre elementy interfejsu użytkownika nie są skalowane poprawnie". Zastanawiałem się, czy ktoś miał bardziej znaczące wyjaśnienie? Dzięki!Dlaczego. Winformy .NET skalują się nieprawidłowo przy dużych ustawieniach DPI?

Odpowiedz

10

Zasadniczo problem polega na tym, że GDI + (i przez rozszerzenie, Windows Forms) używa pikseli urządzenia jako domyślnej jednostki miary. Po zmianie ustawienia DPI fizyczny rozmiar piksela nie zmienia się (piksel to piksel), ale czcionki i obrazy mierzone w rozmiarach innych niż piksele są odpowiednio skalowane. Windows Forms stara się dopasować to najlepiej, jak to tylko możliwe, tworząc więcej miejsca na układ, ale jedynym prawdziwym rozwiązaniem jest użycie systemu pomiarowego nie opartego na pikselach. Właśnie to robi WPF.

W trybie WPF, w rozdzielczości 96 DPI piksel niezależny od urządzenia odpowiada rozmiarowi fizycznemu piksela. Ale po zmianie DPI systemu, WPF skaluje wirtualny układ współrzędnych na całym świecie. Aplikacja, kontrolki itp. Nie mają pojęcia, że ​​nie są już ustawione na fizyczne piksele. W rzeczywistości może to czasami powodować problemy z aliasingiem w WPF, ale nigdy nie musisz się martwić, że układ aplikacji jest inny w różnych ustawieniach DPI.

Jedną z rzeczy, które możesz zrobić, aby zminimalizować problem w Windows Forms, jest użycie "nowych" (jak w .NET 2.0) paneli układu, takich jak TableLayoutPanel, FlowLayoutPanel itp. Użyj zakotwiczenia, Docku i AutoSize, gdy tylko jest to możliwe. Umożliwi to Windows Forms ponowne przeprojektowanie Twojego interfejsu, najlepiej jak tylko możliwe.

Należy również pamiętać, że w przypadku tworzenia formularzy o niestandardowych DPI, Windows Forms użyje go jako "podstawowego" rozmiaru. To prawie zawsze powoduje problemy. Więc spróbuj użyć 96 DPI do zaprojektowania swoich formularzy.

Powiązane problemy