在this post中,CodeNaked讨论了如何更改应用程序的TextFormattingModeProperty。这完全解决了我的问题(见下文).Net 4.然而我的生产应用程序是在.Net 3.5中,根本没有该属性。我如何在.Net 3.5中完成同样的事情?
我的根本问题:
我有一个基于.Net 3.5的winforms应用程序,在某些屏幕上有一些WPF控件。当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"