Von der Schriftgröße unabhängige Benutzeroberfläche:Alles ist kaputt gegangen, als ich auf 120 DPI umgestellt habe?

StackOverflow https://stackoverflow.com/questions/50528

Frage

Ich habe also die Windows Vista-Benutzeroberflächenrichtlinien gelesen, auf die jemand in einer anderen Frage verlinkt hat, und dort wurde erwähnt, dass Sie einen Wechsel zu 120 DPI überstehen sollten.Nun, ich starte meine praktische VM mit installierter App und was bekommen wir ...AAAAGH!!!MASSIVER UI-FEHLER!

Alles ist durcheinander:Einige Behälter sind nicht groß genug für ihren Text.einige Bedienelemente, die „nebeneinander“ positioniert waren, sind jetzt alle zusammengedrückt/auseinander gespreizt;einige Knöpfe sind nicht hoch genug;Mein ListView Spalten sind nicht breit genug...eeek.

Es hört sich so an, als wäre ein völlig anderer Ansatz angebracht.Bei meinem vorherigen habe ich im Wesentlichen den VS2008-Windows-Forms-Designer verwendet, um vermutlich ein pixelbasiertes Layout zu erstellen.Ich kann mir vorstellen, dass, wenn ich bei Windows Forms bleiben würde, FlowLayoutPanels wären hilfreich, obwohl ich sie in der Vergangenheit als eher unflexibel empfunden habe.Sie lösen auch nicht das Problem, dass die Behälter (z. B.das Formular selbst) sind nicht groß genug;Vermutlich gibt es eine Möglichkeit, das zu tun?Vielleicht das AutoSize Eigentum?

Dies könnte auch ein Zeichen dafür sein, dass es an der Zeit ist, auf WPF umzusteigen.Ich habe den Eindruck, dass es speziell für so etwas entwickelt wurde.

Das Grundproblem scheint auf Folgendes zurückzuführen zu sein:

  • Wenn ich bei Windows Forms bleiben würde, welche Tricks gibt es, um ein von der Schriftgröße unabhängiges Layout zu erreichen, das es übersteht, wenn der Benutzer seine Schriftarten groß einstellt oder die Anzeige auf 120 DPI einstellt?
  • Hat WPF hier erhebliche Vorteile, und wenn ja, können Sie mich davon überzeugen, dass sich der Wechsel lohnt?
  • Gibt es allgemeine „Best Practices“ für schriftgrößenunabhängige Layouts, entweder im .NET-Stack oder allgemein?
War es hilfreich?

Lösung

Erfahren Sie, wie die Anker Und Dock Eigenschaften funktionieren auf Ihren Steuerelementen. Lassen Sie alles übrig, was möglich ist Automatische Größenanpassung sich selbst allein, und verwenden Sie a TableLayoutPanel wenn du kannst.

Wenn Sie diese drei Dinge tun, erhalten Sie einen Großteil der WPF-Entwurfserfahrung in Windows Forms.Ein gut gestaltetes TableLayoutPanel wird sein Bestes tun, um die Steuerelemente so zu dimensionieren, dass sie richtig in das Formular passen.Kombiniert mit Automatische Größenanpassung Bedienelemente, Andocken usw AutoScaleMode Wie von Soeren Kuklau erwähnt, sollten Sie in der Lage sein, etwas zu machen, das sich gut skalieren lässt.Wenn nicht, enthält Ihr Formular möglicherweise einfach zu viele Steuerelemente.Erwägen Sie die Aufteilung in Registerkarten, schwebende Toolboxen oder einen anderen Bereich.

In WPF ist es viel einfacher, weil das Konzept der automatischen Größenanpassung integriert ist.Wenn Sie ein WPF-Element mithilfe eines Koordinatenpaars platzieren, machen Sie es in den meisten Fällen falsch.Dennoch können Sie nichts daran ändern, dass bei niedrigeren Auflösungen nicht viel 120-dpi-Text erforderlich ist, um den Bildschirm auszufüllen.Manchmal ist das Problem nicht Ihr Layout, sondern der Versuch, zu viel auf kleinem Raum unterzubringen.

Andere Tipps

Wenn ich bei Windows Forms bleiben würde, welche Tricks gibt es, um ein von der Schriftgröße unabhängiges Layout zu erreichen, das es übersteht, wenn der Benutzer seine Schriftarten groß einstellt oder die Anzeige auf 120 DPI einstellt?

Für eine, AutoScaleMode könnte dein Freund sein.

Im Allgemeinen besteht das Problem darin, zwei verschiedene „Konstanten“ für das Formularlayout zu verwenden und dann eine dieser Konstanten zu ändern, ohne die andere zu ändern.

Sie verwenden Pixel für Ihre Formularelemente und Punkte (im Wesentlichen Zoll), um die Schriftgröße anzugeben.Pixel und Punkte hängen durch die DPI zusammen. Wenn Sie also die DPI ändern, stimmen Ihre festen Pixelwerte plötzlich nicht mehr mit Ihren festen Punktwerten überein.

Dafür gibt es Pakete und Klassen, aber am Ende des Tages müssen Sie sich für die eine oder andere Einheit entscheiden oder eine der Einheiten entsprechend der sich ändernden Konstante skalieren.

Persönlich würde ich die Einheiten auf dem Formular in Zoll ändern.Ich bin kein C#-Benutzer und weiß daher nicht, ob dies nativ unterstützt wird oder ob Sie beim Anwendungsstart eine dynamische Formulargrößenanpassung durchführen müssen.

Wenn Sie dies in Ihrer Software tun müssen, passen Sie alles normal an (z. B. auf Ihre üblichen 96 DPI).

Stellen Sie beim Start Ihrer Anwendung sicher, dass das System 96 DPI hat, bevor Sie Ihre Formulare anzeigen.Wenn ja, großartig.Wenn nicht, legen Sie eine Variable mit dem Korrekturfaktor fest und skalieren und verschieben Sie jedes Element (ändern Sie sowohl die Position als auch die Größe), bevor Sie das Formular anzeigen.

Das Letzte wäre jedoch, alles in Zoll oder Punkten anzugeben (ein Punkt ist 1/72 Zoll) und das Betriebssystem damit umgehen zu lassen.Möglicherweise müssen Sie sich mit Eckfällen auseinandersetzen (ein Außenbildschirm mit einer korrekt eingestellten DPI würde Ihre Anwendung in wenigen Pixeln anzeigen ...)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top