2013-10-23 91 views
8

this post中,CodeNaked討論瞭如何更改應用程序的TextFormattingModeProperty。這在.Net 4中完全解決了我的問題(請參閱下文)。但是,我的生產應用程序是在.Net 3.5中,它根本沒有該屬性。我如何在.Net 3.5中完成同樣的事情?在混合WinForms和WPF應用程序中的.Net 3.5中進行DPI縮放

我根本問題:

我有有一些WPF某些屏幕控制基於在.net 3.5 WinForms應用程序。當Windows DPI設置設置爲150%(不是120%)時,按預期發生縮放。但是,一旦創建了WPF控件,所有窗口的縮放比例就會回到100%。我希望縮放比例保持不變。

我創建了test application來演示。默認情況下,它打開一個帶有一個按鈕的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 
+0

我也遇到了這個問題,但是這個問題的接受的答案不適合我。 –

回答

4

你必須直接定義你的應用程序是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" 
相關問題