相关疑难解决方法(0)

创建DPI感知应用程序

我在C#中有一个表单应用程序.当我更改显示器的DPI时,所有控件都会移动.我使用了代码this.AutoScaleMode = AutoScaleMode.Dpi,但它没有避免这个问题.

有没有人有想法?

c# dpi dpi-aware

67
推荐指数
4
解决办法
8万
查看次数

混合WinForms和WPF应用程序中的.Net 3.5中的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
Run Code Online (Sandbox Code Playgroud)

班级应用:

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
Run Code Online (Sandbox Code Playgroud)

.net wpf scaling dpi winforms

8
推荐指数
1
解决办法
2780
查看次数

混合WPF和winforms项目DPI意识

我有一个使用winforms和WPF的C#程序,我很难让它在高DPI环境中工作.目前,如果我从解决方案中删除所有WPF项目并运行它,它将可以很好地扩展,但是一旦我添加任何wpf(功能必需),扩展失败并且UI变得不可用.

这似乎与之前的SO问题完全相同:混合WinForms和WPF应用程序中的.Net 3.5中的DPI缩放以及使用DPI正确扩展WinForms的问题

我按照有关这些问题的建议,尝试添加清单文件和提供的dpi识别代码.

我还将项目升级到.net framework 4.6.1(从4.0开始)并包含了app.config设置: <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />

这确实影响了程序的主shell(因此,不是在一个小窗口中加载所有控件被压缩,主程序窗口打开最大化并显示正常)但是,当我从主窗口输入任何winforms子窗体或插件时,缩放失败.

当我输入任何WPF子窗体或插件,或返回到主屏幕时,这些渲染正确.只有winforms功能无法正确扩展.

有没有人对如何让混合winforms/WPF项目在高DPI中正确扩展有任何想法?

提前致谢

c# wpf highdpi winforms .net-4.6

6
推荐指数
1
解决办法
2900
查看次数

标签 统计

c# ×2

dpi ×2

winforms ×2

wpf ×2

.net ×1

.net-4.6 ×1

dpi-aware ×1

highdpi ×1

scaling ×1