WinForms多个DPI,多个开发人员

时间:2014-10-01 03:39:50

标签: c# winforms version-control visual-studio-2013 dpi

我正在开发WinForms应用程序以及大量具有不同屏幕配置(包括不同DPI设置)的开发人员。因此,我们的应用程序可以扩展我们使用AutoScaleMode = AutoScaleMode.Font将所有表单设置为自动缩放,并设置相应的AutoScaleDimensions,具体取决于开发表单的设置。

通过这些配置,WinForms可以在不同的屏幕上正确扩展,问题是当具有不同屏幕配置的开发人员在设计器模式下打开表单时,Visual Studio会通过实际修改自动模式来扩展控件。生成的代码包含' new'对象的维度,以及修改和AutoScaleDimensions属性以匹配新监视器。

如果我没有几个开发人员在同一个表单上工作,那么这种行为就没问题了。如果发生这种情况,并且这些开发人员具有不同的屏幕配置,则在使用我们的VCS合并更改时会产生大量冲突,而不是说我会为不同的屏幕分辨率存储值,从而弄乱了UI。

要解决此问题,我尝试通过设置AutoScaleMode = AutoScaleMode.None并为我的控件实现自定义设计器来关闭自动缩放功能。此设计器仅在一个分辨率中保存对象的大小,然后通过遮蔽Size属性并根据当前DPI返回缩放值。我这样做只是为了发现VS设计师根据自定义设计师的说法生成代码,而不是实际存储在对象中的值。

那么,有没有人知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

好吧,好像我自己找到了答案。

解决方案是创建一个自定义设计器,让设计师相信它在显示表单时会收到一个缩放值,但是当生成代码时,通过{的方式生成未缩放值的代码{1}}自定义设计器的数组,如下面的代码示例中所述:

ShadowedProperties
相关问题