设计表单以在Windows CE上处理不同的分辨率和宽高比

我有一个在Compact Framework上运行的.NET 2.0应用程序。 它有许多不同的forms,最初都是为在具有特定屏幕分辨率的特定设备上运行而设计的。 我现在希望让这个应用程序在其他一些具有非常不同的屏幕分辨率的设备上运行(有些具有完全相反的宽高比,其中屏幕现在比它的宽度更高)。 我的问题是如何在其他屏幕上更改表单以使其看起来更好?

这与在完整框架上设计表单略有不同,因为我必须设计这些表单以占据整个屏幕,因为屏幕非常小。 我曾考虑为每种类型的屏幕方向创建单独的表单(例如MyForm_Wide.cs,MyForm_Tall.cs等)。 我希望能够重用非设计器生成的代码,该代码包含许多与UI控件绑定的业务逻辑。 也许我可以某种方式使用部分类来实现这一点(例如,MyForm.cs以某种方式被编译成MyForm_Wide.Designer.cs等)。 我真的想避免每个屏幕方向的特定编译版本。 我想到的另一种方法是尝试根据确定的屏幕大小在运行时重新排列一些控件。

你们有什么感想?

我们使用Clarius的Orientation Aware Control框架。 它不仅解决了外形尺寸问题,还解决了支持它的设备,方向变化(屏幕旋转)的问题。

与传统桌面开发相比,移动开发最独特的方面可能是需要支持越来越多的设备外形。

对于专业的移动开发人员来说,设计支持多种外形,分辨率和屏幕方向的移动应用程序是一项非常重要,耗时且具有挑战性的工作并不是新闻。 一般来说,.NET Compact Framework v2.0中的内置对接和锚定function远远不够。

Orientation Aware Control允许设计和编码具有多个布局或外观的单个控件或表单,这些布局或外观根据可用的外形,分辨率和方向在运行时(和设计时)自动应用。 其出色的Visual Studio表单和用户控制设计器集成以及零代码自适应UI行为使Orientation Aware Control成为任何针对多个设备的移动商店的必备伴侣,带来了专注于发展业务所需的生产力。

由于c#设计师非常“以像素为导向”,因此没有简单的方法来转换表单。

我不知道你想付出多少努力,但如果你有很多时间并想要一个非常灵活的解决方案,我建议你应该使用某种支持流程布局,边框布局等的布局管理器。

当然,最初的c#设计师对设计这些灵活的布局管理表单没有多大帮助。

但是使用布局管理器可能会减慢表单的初始显示速度。 如果您想要真正的高速表单显示,则必须在显示表单之前计算表单上所有控件的所有位置。 重新排列控件并显示您的表单 – 但这是很多编码,并且对于gui更改不是很灵活。

您应该将主窗体的“AutoScaleMode”属性设置为“DPI”。

然后,它是使用锚点和对接在窗体上的特定控件的问题。 如果你这样做,紧凑的框架将保持你认为他们的东西。

此外,可以更改表单的“Form Factor”属性,以查看表单在不同大小和形状的移动设备上的外观。

我想我已经弄明白了我想做什么。 出于某种原因,即使在我的高分辨率设备上,DPI仍然根据WinForms API显示为96,因此自动缩放function无效。 相反,如果我在控件上手动调用Scale ,我会让它们按照我想要的方式进行扩展。 现在,在我不想进行任何缩放的情况下,这并不能完全解决我的问题,但如果屏幕的宽高比与我最初设计的相比,我确实想要重新组织我的控件。 对于这种情况,我想我会考虑使用不同的布局面板(例如FlowLayoutPanelTableLayoutPanel )来有希望地适当地组织控件。

希望这将有助于任何未来的Google员工……

标签上的“自动尺寸”属性也会在切换形状因素时混乱 – 顺便说一句 – 所以我将其设置为false。