WPF-Webbrowsersteuerung und DPI-Skalierung

8

Ich arbeite mit einer WPF-Anwendung, die das Webbrowser-Steuerelement verwendet, und ich habe Probleme mit der Skalierung mit hohem DPI.

Es sieht so aus, als ob das Webbrowser-Steuerelement die DPI-Einstellungen des Systems nicht korrekt berücksichtigt, während der Rest der WPF-Anwendung die Benutzeroberfläche ordnungsgemäß skaliert. Dies bedeutet, dass auf höheren Ebenen die WPF-Oberfläche größer wird, während der Webbrowser-Inhalt auf der ursprünglichen, jetzt kleiner aussehenden Größe bleibt.

Hier sehen Sie ein Beispiel für Screenshots von einer WPF-App, die zwei Webbrowser-Steuerelemente verwendet.

100% Skalierung:

150% Skalierung:

Beachten Sie, dass die Skalierung des Webbrowsers im zweiten Bild wesentlich kleiner ist als im ersten Bild relativ zum Hauptformularinhalt (Symbolleiste / Menü / Statusleiste).

Gibt es eine Möglichkeit, das Webbrowser-Steuerelement zu zwingen, die von der Anwendung übernommenen Einstellungen für den hohen DPI richtig zu verwenden?

Dieser MSDN-Link: Adressierung von DPI-Problemen

zeigt einen sehr niedrigen Ansatz (am unteren Ende von doc), der benutzerdefinierte Webbrowser-COM-Schnittstellen implementiert, aber ich frage mich, ob es eine sauberere Möglichkeit gibt, dies zu beheben.

    
Rick Strahl 03.08.2016, 22:00
quelle

2 Antworten

2

Hier ist der Code einer Dienstprogrammklasse, mit der Sie das WebBrowser-Kontextmenü von WPF deaktivieren können. Es erlaubt Ihnen auch, Skriptfehler zu unterdrücken ( WPF WebBrowser-Steuerelement - wie zu unterdrücken Skriptfehler ?) und ändern Sie IE DOCHOSTUIFLAG .

Anwendungsbeispiel:

%Vor%

Hilfscode:

%Vor%     
gmetax 17.11.2016 14:41
quelle
1

Ich habe gefunden, was ich denke, ist der beste Weg, um die erforderliche Funktionalität zu erreichen (vorausgesetzt, dass Sie sowieso FEATURE_BROWSER_EMULATION in der Registrierung angeben müssen, um die neueste IE-Version zu verwenden) .

Sie müssen lediglich einen neuen Schlüssel in HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl named FEATURE_96DPI_PIXEL erstellen und dort Ihren ausführbaren Eintrag vom Typ DWORD (32-bit) hinzufügen, mit der Anwendung exe als Schlüsselname und dem Wert 1 .

Überprüfen Sie die Einstellung beim Start der Anwendung, bevor Sie die WebBrowser-Komponente tatsächlich instanziieren, und Sie sollten in Ordnung sein.

Originaler Beitrag (mit anderen möglichen Funktionen): Ссылка

    
Miro Hudak 05.08.2017 13:31
quelle

Tags und Links