2013-10-23 7 views
8

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 
+0

ich auch dieses Problem erlebe, aber die akzeptierte Antwort auf diese Frage für mich nicht funktioniert hat. –

Antwort

4

Sie müssen direkt definieren Sie Ihre App ist DPI bewusst

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633543(v=vs.85).aspx

I app.manifest Datei in Ihrem Projekt erstellt haben und hinzugefügt

<asmv3:application> 
     <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> 
      <dpiAware>true</dpiAware> 
     </asmv3:windowsSettings> 
    </asmv3:application> 

wo asmv3 ist

xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"