Dot-Net
.Net 3.5 在混合 WinForms 和 WPF 應用程序中的 DPI 縮放
在這篇文章中,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"