在这篇文章中,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