已知问题:WinForms设计器在高DPI下,
初始控件大小过小,如图所示:
解决方案1:将sharpdevelop.exe程序资源manifest中的<ws:dpiAware>true</ws:dpiAware>注释掉,失败。
分析原因:启动后某些组件仍会调用SetProcessDPIAware函数,仍会导致DPI虚拟化被关闭。
解决方案2:将sharpdevelop.exe程序资源manifest中的<ws:dpiAware>true</ws:dpiAware>改为<ws:dpiAware>false</ws:dpiAware>,成功。分析原因:DPI虚拟化级别只能设置一次,在manifest中设置后会屏蔽任何的SetProcessDPIAware调用。
【步骤】1.安装最新版SharpDevelop(
XXXXXXXXXXXXXXXXXXXXXXXXXt/OpenSource/SD/XXXXXXXXXXpx)
2.从C:\Program Files (x86)\SharpDevelop\4.4\bin复制出SharpDevelop.exe
3.用十六进制编辑器打开这个文件,搜索dpiAware,如图所示:
4.用
覆盖模式将<ws:dpiAware>true</ws:dpiAware>改为<ws:dpiAware>false</ws:dpiAware>,如图所示:
5.将修改后的SharpDevelop.exe覆盖回C:\Program Files (x86)\SharpDevelop\4.4\bin,再次启动,尝试,控件初始大小正常!
【更普遍的解决方法】Windows还提供了一个注册表,可以让PE Loader优先使用外部的*.XXXXXXnifest文件,而不是内部的manifest资源:1.按Win+R打开运行对话框,输入regedit回车,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide,新建DWORD值,名称为PreferExternalManifest,值设为1。
2.将C:\Program Files (x86)\SharpDevelop\4.4\bin\SharpDevelop.exe复制到桌面,重命名SharpDevelop.txt,打开,搜索</assembly>。
3.复制<?xml version="1.0" encoding="UTF-8" standalone="yes"?>到</assembly>的所有内容。
4.新建文本文档,将所有内容粘贴进去,修改<ws:dpiAware>true</ws:dpiAware>为false。
5.将该文件保存为XXXXXXXXXXXXXXXXXXXnifest,文件类型选【所有文件 (*.*)】。
6.把这个文件复制到C:\Program Files (x86)\SharpDevelop\4.4\bin文件夹下,再次启动,尝试,控件初始大小正常!
200字以内,仅用于支线交流,主线讨论请采用回复功能。