C# 如何为不同的显示器分辨率设计GUI?

C# 如何为不同的显示器分辨率设计GUI?,c#,wpf,C#,Wpf,我正在为特殊应用程序设计和实现GUI 我在C#上使用WPF 我打算将此应用程序应用于不同的显示器分辨率(1366x768或1920x1080,…) 但我没有这方面的经验。我不知道如何实现灵活的GUI,它可以在任何分辨率上显示 有人能给我一些想法吗?1-手工编写XAML,不要使用Visual Studio designer 设计器生成固定大小的固定位置UI(ala winforms),如果需要独立于分辨率,则该设计器将不起作用 2-也不要自己固定UI元素的大小和位置 不要做诸如之类的事情。相

我正在为特殊应用程序设计和实现GUI

我在C#上使用WPF

我打算将此应用程序应用于不同的显示器分辨率(1366x768或1920x1080,…)

但我没有这方面的经验。我不知道如何实现灵活的GUI,它可以在任何分辨率上显示


有人能给我一些想法吗?

1-手工编写XAML,不要使用Visual Studio designer

  • 设计器生成固定大小的固定位置UI(ala winforms),如果需要独立于分辨率,则该设计器将不起作用
2-也不要自己固定UI元素的大小和位置

  • 不要做诸如
    之类的事情。相反,将UI放在与分辨率无关的布局容器中,例如或
    DockPanel
    。在网格中也使用星形大小
编辑:添加@Viv的评论,这非常重要,我决定将其作为答案的一部分:


与编程中的其他内容一样,对第1点持保留态度。不要再像“在MVVM中,代码隐藏中的任何代码都是错误的”这样声明。使用Designer(VS/Blend)生成模板、修改故事板、VSM、导入Illustrator/Photoshop文件是完全合理的。知道你在处理什么,即使在这种情况下你得到了恒定的尺寸,也要相应地调整xaml以摆脱它,而不是完全忽略它的每个方面。首先,它在某种程度上取决于应用程序的性质,但是你指定的分辨率在总体方案中并没有很大的不同(如果您将640x480与2560x1600进行比较,那么您可能会有更大的顾虑!),因此,如果您选择正确的组件,它们很可能会为您自行组织(或者更恰当地说,操作系统会在幕后组织它们)

事实上,您选择了WPF意味着您在UI元素的渲染方式上具有极大的灵活性,因为WPF本质上是一个基于矢量的渲染引擎,而Windows窗体(GDI/GDI+)是一个基于DPI/每像素的渲染引擎

但让我们深入探讨一下,好吗

比如说,你在Windows窗体中设计UI,它需要窗体上有一个ToolStrip,然后你将所有1000个按钮添加到ToolStrip。好的,在大型显示器上,你可能只看到所有1000个按钮,但在bog标准1080p显示器上,你可能只看到30个按钮;那么其余的按钮会发生什么情况呢?-Windows会将这些按钮放在s中ub菜单,位于ToolStrip的末尾,这样您仍然可以访问它们,即使它们不在ToolStrip的主(可见)部分。我非常确定,同样的原则也将适用于WPF,因为您可能会对事物的渲染和显示有更大的控制权

WPF通过矢量渲染带来的最大好处是分辨率独立性。这使您可以灵活地决定是否希望元素渲染为“固定”大小(在任何分辨率下,它将始终使用相同的像素),或者允许引擎根据分辨率动态调整元素大小(在低分辨率情况下,元素将使用较少的像素进行渲染,但质量较差;在高分辨率情况下,元素将使用较多的像素进行渲染,质量更高)

为了让你开始,这里有一本来自SyncFusion的免费WPF电子书(说真的,看看吧,他们免费赠送了不少不错的东西!)


是的,WPF是这类东西的最佳选择。你不应该精确地设置列的高度和宽度。将其设置为“自动”或*。然后也许你需要学习WPF的基本知识。@Richard Ev:我曾考虑过使用百分比表示大小,或使用“自动”,正如Dilshod提到的,但我想在开始之前了解更多信息。谢谢你的建议建议,Dilshod!我建议您看看。如果您使用适当的布局控件,创建灵活的GUI是轻而易举的事。太棒了!谢谢您,HighCore!手工编写XAML有很多好处,特别是在VS2012中。一开始似乎是一个倒退(拖放式用户界面开发在问世时是一个巨大的进步),但它比WinForms更简单、更高效,即使你已经习惯了XAML。@DanBryant我使用过的每一个用户界面设计师都不应该完全依赖,无论是WPF、WinForms、ASP还是纯HTML(根据你的编辑器选择),Java swing应用程序等。它们在偶尔的情况下可以用来做一些工作,但实际上永远不能完全依赖它们。UI设计的内在复杂性对于设计师来说太复杂了。就像编程中的所有其他事情一样,对第1点持保留态度。不要再像这样说了“在MVVM中,代码隐藏中的任何代码都是错误的”。使用设计器(VS/Blend)对于生成模板、修改情节串连板、VSM、导入iLudtrator/Photoshop文件之类的事情,这是完全合理的。知道你在处理什么,即使在这种情况下你得到恒定的尺寸,也要相应地调整xaml以摆脱它,而不是完全忽略它的各个方面。@Viv我想更准确的说法应该是“不要完全依赖设计师生成的代码”。这可能意味着要么从头开始编写代码,要么对设计师生成的代码进行重大更改以解释其弱点。感谢您的回答!