当我打开我的主窗体设计窗口(VS2010中的C#文件)时,关联的资源文件会自动修改,有时它是位置,有时它是图像的数据或只是代码的顺序被重新排列.一切仍然编译和工作正常,我只需要记住要恢复这些更改,否则我会不断地向我的存储库提出乱码.有人知道为什么会这样,也许是因为某些组件?
编辑:
例如,这个数据:
<data name="connectToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
somevalue
</value>
Run Code Online (Sandbox Code Playgroud)
获取自动更改为:
<data name="connectToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
someothervalue
</value>
Run Code Online (Sandbox Code Playgroud)
并放在一个不同的地方.一切仍然正常,问题是这些更改显示在我的源代码控制中,所以我必须记得在我提交之前还原resx文件,除非我实际上对文件做了一些修改,然后我必须提交所有内容.
除非我实际上对文件做了一些修改,否则我必须提交所有内容
当你被迫提交.resx文件以某种方式不将图像变成"乱码" 时,你还不清楚你做了什么.抱怨只是不太可信,我会假设真正的问题是.resx文件发生了变化,你不知道为什么.
.resx文件有一个越来越普遍的原因,没有任何明显的原因改变,只需在设计器中打开表单就足够了.特别是最近Windows 10变得越来越常见.根本原因是视频适配器的DPI(每英寸点数)设置.这种设置几十年来一直停留在100%(又名96 dpi),但廉价的高分辨率LCD面板正变得越来越普遍,迫使用户将缩放比例增加到125或150%以保持文字清晰.并为Win10安装程序选择更高的值.
这对UI设计有非常显着的影响,Form.AutoScaleMode属性也在设计时完成它的工作.Visual Studio是dpiAware,因此设计人员可以看到DPI的变化.WYSIWYG保留,只要该应用程序也被声明为dpiAware.非常重要的顺便说一句,最后使用VS2015 Update 1变得更容易了,Application Manifest File项目模板现在包含它.只需删除评论即可.
这确实会改变.resx文件内容.特别是对于MenuStrip,其TrayLocation被序列化为该文件.菜单项的OnImageScalingSizeChanged()方法在设计时运行.对于任何控件,如果窗体的Localizable属性设置为True,则将其Location和Size属性序列化为.resx文件.
识别它的最简单方法是查看表单的Designer.cs文件的根本原因:
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
Run Code Online (Sandbox Code Playgroud)
将此与一个全新的Winforms项目上的相同属性赋值进行比较.一个不同的值将自动重新调整以完成其工作并更改.resx文件.
不匹配的常见原因是在另一台机器上创建的设计.也许是较旧的一个.或者可能由另一个在不同DPI设置下运行其显示适配器的团队成员修改.如果团队成员没有相同的硬件,那么让每个人都同意通常并不那么简单.为每个人提供同样漂亮的显示器,否则对于小钱来说是一个非常好的士气提升:)也许你不应该那么努力,只需检查它,这样你下次就不必提醒了.
| 归档时间: |
|
| 查看次数: |
1559 次 |
| 最近记录: |