In this post erläutert CodeNaked, wie die TextFormattingModeProperty der Anwendung geändert wird. Dies löst mein Problem (siehe unten) perfekt in .Net 4. Allerdings ist meine Produktion Anwendung in. Net 3.5, die diese Eigenschaft überhaupt nicht hat. Wie erreiche ich dasselbe in .Net 3.5?DPI-Skalierung in .NET 3.5 in gemischten WinForms und WPF-Anwendung
Mein Grundproblem:
Ich habe eine WinForms-Anwendung basiert auf .NET 3.5, die einige WPF-Steuerelemente auf bestimmten Bildschirmen hat. Wenn die Windows DPI-Einstellung auf 150% (nicht 120%) festgelegt ist, erfolgt die Skalierung wie erwartet. Sobald jedoch ein WPF-Steuerelement erstellt wird, wird die Skalierung für alle Fenster auf 100% zurückgesetzt. Ich möchte, dass die Skalierung unverändert bleibt.
Ich erstellte eine test application zu demonstrieren. Standardmäßig öffnet es eine Winform, die über eine Schaltfläche verfügt, die ein weiteres WinForm mit einem WPF-Steuerelement öffnet. Wenn Sie das zweite Formular unverändert lassen, wird die Skalierung auf 100% zurückgesetzt. Wenn Zeile 11 in Form1.vb jedoch unkommentiert ist, wird die Skalierung korrekt fortgesetzt, wenn das zweite Formular geöffnet wird.
Dim newApp As New App() 'Uncomment to fix automatic scaling
Klasse App:
Imports System.Windows
Imports System.Windows.Media
Partial Public Class App
Inherits Application
Public Sub App()
TextOptions.TextFormattingModeProperty.OverrideMetadata(GetType(Window), New FrameworkPropertyMetadata(TextFormattingMode.Display, FrameworkPropertyMetadataOptions.AffectsMeasure Or FrameworkPropertyMetadataOptions.AffectsRender Or FrameworkPropertyMetadataOptions.Inherits))
End Sub
End Class
ich auch dieses Problem erlebe, aber die akzeptierte Antwort auf diese Frage für mich nicht funktioniert hat. –