Występują problemy z poprawnym wyświetlaniem aplikacji WinForms przy ustawieniach wysokich DPI. Sprawdziłem różne witryny internetowe, a wszystkie WinFormy mają poprawną AutoScaleMode. Próbowałem ustawić to zarówno DPI i Font. Jednak formularze zawsze są odcinane w pobliżu dna, gdy używane są ustawienia wysokiej czułości (na przykład 125%).Problemy z poprawnym skalowaniem WinForm do DPI
Dodałem kod do sprawdzenia, a jeśli ustawię AutoScaleMode na DPI, to po załadowaniu formularza widzę, że AutoScaleDimensions wynosi 120,120 podczas ładowania formularza, a CurrentAutoScaleDimensions również 120,120. W pliku Form.designer.cs znajduje się wiersz do ustawienia AutoScaleDimension na 96,96.
Jeżeli ustawić AutoScaleMode do czcionki, to widzę, że w projektanta AutoScaleDimension jest prawidłowo ustawiony na nowym System.Drawing.SizeF (6F, 13F), ale po załadowaniu formularza, zarówno AutoScaleDimension i CurrentAutoScaleDimension są ustawione na 8F, 16F.
Ta aplikacja łączy niektóre WPF z WinForm, a ekrany WPF pojawiają się jako pierwsze. Tak więc na podstawie DPI Scaling in .Net 3.5 in Mixed WinForms and WPF Application próbowałem ustawić TextFormattingMode dla aplikacji, a dla ekranów WPF, które pokazują się jako pierwsze, "Display", ale nie robi to żadnej różnicy.
Jestem, szczerze mówiąc, zagubiony co do tego powodu. Przypuszczam, że mógłbym dodać kod, aby zmienić rozmiar rzeczy programowo, wykrywając DPI w czasie wykonywania, ale nie powinienem tego robić. Właściwości AutoScaleMode (i pokrewne) mają to zrobić dość automatycznie. Więc co jeszcze powinienem sprawdzić, co może spowodować ten problem?
125% to nie "Wysoka czułość". WPF zdecydowanie ma wpływ, ponieważ ustawia flagę świadomą wysokiego DPI w czasie wykonywania, nawet jeśli nie jest ona ustawiona w manifeście. WinForm może być zdezorientowany, jeśli chodzi o to, czy powinien skalować, czy pozwolić, aby system operacyjny zrobił to automatycznie. –
Ben, przepraszam, przypuszczam, że "wyższe DPI" może być dokładniejsze. Muszę przyjrzeć się temu bardziej szczegółowo, ponieważ problem występował nawet po zmianie aplikacji, więc nie wyświetlamy najpierw ekranów WPF. – WarnerYoung
Nowoczesne ustawienia oparte na% powodują, że cały wyższy/niższy problem jest mylący. "Kropki na cal" są niższe dla większych czcionek. Ustawienia old school DPI niższe liczby zostały użyte dla wyższych czcionek, nowsze wersje Windows przyjąć standardową DPI i użyć procentowej wielkości czcionki, więc wyższa wartość jest używana dla wyższych czcionek. Zwykle mniej zagmatwane jest używanie liczb rzeczywistych niż wyższych/niższych. –