Ich habe Probleme mit der korrekten Anzeige einer WinForms-App bei hohen DPI-Einstellungen. Ich habe verschiedene Websites überprüft, und die WinForms haben alle den richtigen AutoScaleMode. Ich habe versucht, dies auf DPI und Schriftart einzustellen. Die Formulare werden jedoch immer in der Nähe des Bodens abgeschnitten, wenn Einstellungen mit hohem DPI (z. B. 125%) verwendet werden.Probleme bei der korrekten Skalierung von WinForms mit DPI
Ich habe etwas Code hinzugefügt, um zu überprüfen, und wenn ich AutoScaleMode auf DPI festlegen, wenn das Formular lädt, sehe ich, dass AutoScaleDimensions 120,120 ist, wenn das Formular geladen wird, und CurrentAutoScaleDimensions ist auch 120,120. In der Datei Form.designer.cs gibt es eine Zeile, um AutoScaleDimension auf 96,96 festzulegen.
Wenn ich AutoScaleMode auf Schriftart festlegen, dann kann ich im Designer sehen, dass AutoScaleDimension korrekt auf neue System.Drawing.SizeF (6F, 13F) eingestellt ist, aber wenn das Formular geladen wird, werden AutoScaleDimension und CurrentAutoScaleDimension auf 8F gesetzt. 16F.
Diese App mischt einige WPF mit WinForms, und die WPF-Bildschirme erscheinen zuerst. Basierend auf DPI Scaling in .Net 3.5 in Mixed WinForms and WPF Application habe ich versucht, den TextFormattingMode für die Anwendung und für die WPF-Bildschirme, die zuerst angezeigt werden, auf "Display" zu setzen, aber das macht keinen Unterschied.
Ich bin, offen gesagt, ratlos, was das verursacht. Ich nehme an, ich könnte Code hinzufügen, um Dinge programmgesteuert zu ändern, indem ich die DPI zur Laufzeit erkenne, aber das sollte ich nicht tun müssen. Die AutoScaleMode (und verwandten) Eigenschaften sollen dies ziemlich automatisch machen. Also, was sollte ich sonst noch prüfen, könnte dieses Problem verursachen?
125% ist nicht "High DPI". WPF hat definitiv Auswirkungen, weil es das Flag "High DPI aware" zur Laufzeit setzt, auch wenn es nicht im Manifest gesetzt ist. WinForms ist möglicherweise nicht sicher, ob es die Skalierung durchführen soll oder ob das Betriebssystem dies automatisch tun soll. –
Ben, tut mir leid, ich denke, "höhere DPI" könnte genauer sein. Ich muss das genauer betrachten, da das Problem auch nach dem Ändern der App bestehen blieb, sodass wir die WPF-Bildschirme nicht zuerst anzeigen. – WarnerYoung
Die modernen% basierten Einstellungen machen das Ganze höher/tiefer. "Dots Per Inch" ist niedriger für größere Schriftarten. Old School DPI-Einstellungen eine niedrigere Anzahl wurde für höhere Schriftarten verwendet, neuere Versionen von Windows nehmen eine Standard-DPI und verwenden eine Schriftgröße Prozent, so dass ein höherer Wert für höhere Schriftarten verwendet wird. Es ist im Allgemeinen weniger verwirrend, tatsächliche Zahlen als höher/niedriger zu verwenden. –