Dot-Net

.Net 3.5 在混合 WinForms 和 WPF 應用程序中的 DPI 縮放

  • November 6, 2014

這篇文章中,CodeNaked 討論瞭如何更改應用程序的 TextFormattingModeProperty。這在 .Net 4 中完美地解決了我的問題(見下文)。但是我的生產應用程序在 .Net 3.5 中,它根本沒有該屬性。我如何在 .Net 3.5 中完成同樣的事情?

我的根本問題:

我有一個基於 .Net 3.5 的 winforms 應用程序,在某些螢幕上有一些 WPF 控制項。當 Windows DPI 設置設置為 150%(不是 120%)時,會按預期進行縮放。但是,一旦創建 WPF 控制項,所有視窗的縮放比例都會設置回 100%。我希望縮放保持不變。

我創建了一個測試應用程序來展示。預設情況下,它會打開一個帶有按鈕的 winform,該按鈕將打開另一個帶有 wpf 控制項的 winform。保持不變,打開第二個表單將導致縮放恢復到 100%。但是,如果 Form1.vb 中的第 11 行未註釋,則在打開第二個窗體時,將繼續正確進行縮放。

Dim newApp As New App() 'Uncomment to fix automatic scaling

課堂應用:

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

您必須直接定義您的應用是否支持 DPI

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

我在您的項目中創建了 app.manifest 文件並添加了

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

asmv3 在哪裡

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

引用自:https://stackoverflow.com/questions/19552299