分辨率独立性如何在WPF中起作用?

时间:2013-09-10 07:55:23

标签: c# .net wpf vb.net xaml

这更多是出于好奇。我正在研究WPF应用程序是独立于分辨率的。这是否意味着我们不必担心显示器分辨率的大小?因为作为Windows应用程序开发人员,我遇到了一些挑战,使应用程序兼容不同的分辨率。

我的问题是WPF如何管理独立于分辨率的属性?我们是否需要提供出现控制的比率?如果用作背景(如果它在高分辨率下扭曲或保持其清晰度),图像的质量将如何影响?

请帮忙。这可能是项目的决定因素。

4 个答案:

答案 0 :(得分:7)

据我所知,WPF使用Buttons的矢量图形而不是像旧版WinForms那样的Bitmaps。因此,WPF可以轻松调整大小并适应不同的屏幕分辨率。 我对背景图像等没有直接经验,但如果它们是基于像素的,我会提供比96 DPI所需的更高分辨率,可能是两倍高?这应该保证,他们在更高的分辨率下看起来并不差。

作为实用说明:WPF应用程序总是可读的,并且在我迄今为止尝试过的所有显示器上看起来都很好。但是如果使用更小的分辨率来显示为更大分辨率开发的程序,则可能会遇到固定对象的问题。例如。将文本框定义为特定的最小尺寸,而不是占用太多可用的屏幕。所以我觉得最好定义尽可能少的约束,然后在发布产品之前测试其他显示器上的应用程序只是因为它总是可读的,但你可能会发现一些可用的问题。

答案 1 :(得分:5)

关于WPF和解决方案独立性的关键在于它使用与设备无关的单元并使用它来正常使用系统dpi设置(“大字体”等);因此,例如,如果您正在将系统设置为默认的96 dpi,并绘制96个单位宽的文本框,WPF知道这是一个逻辑英寸。如果您然后将分辨率更改为144 dpi,WPF将使用144个物理像素绘制文本框。所有的GUI元素都像这样完美地扩展。如果您使用Winforms GUI尝试相同的操作,您将看到它无法正确扩展 - 您最终会在小文本框中使用大字体等

ETA 另一种方法是澄清分辨率的意思 - 我猜1024 x 768实际上是'屏幕尺寸,以像素为单位',96dpi更准确地说是实际分辨率,而且它改变了这一点,WPF正确处理,而其他平台“T;如果您只需将800 x 600更改为1024 x 768,则Winforms等和WPF都将正确显示。

答案 2 :(得分:2)

WPF是基于矢量的,包含许多强大的布局功能,以确保在任何设备上都可以很好地进行缩放(简单但功能强大的Grid控件是我最喜欢的一个)。它基本上使用一个测量和排列系统,确保儿童控制知道他们需要多少空间,因此可以相应地调整自己的大小

话虽如此,由UI设计师确保应用程序布局是可扩展的,因为通过设置显式大小等仍然可以创建硬编码的固定,非流体布局

如果确实发生了这种情况,则可以缩放整个UI(通过使用变换和其他方法),这将具有放大/缩小的效果,具体取决于应用是针对更大还是更小的分辨率。这样做的缺点是,如果不为这种缩放设计,任何非矢量内容(如位图)都会看起来像块状或失真

总之,WPF不直接管理任何分辨率独立性,但是通过使用一些简单的布局概念,可以制作独立于分辨率的UI而无需使用缩放(类似于在WinForms中使用锚定...但是好多了)

一个小例子:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="100">
        <ColumnDefinition Width="auto">
        <ColumnDefinition Width="*">
        <ColumnDefinition Width="2*">
    </Grid.ColumnDefinitions>
</Grid> 

这将创建一个双列网格布局,其中第一列的固定宽度为100个单位,第二列仅占用足够的空间以适合其子控件,第四列按比例占据空间的两倍。第三栏。这些列将拉伸以完全填充其父容器,即屏幕的一小部分区域或完整窗口。

这可以通过测量可用空间的大小来实现,使第一列固定为100个单位,使第二列成为其中的子控件的大小,然后确定剩余的空间和划分它根据其比率在其他列中。 (星号*前面的数字是每个动态大小的列应占用的空间比例。*就自己而言相当于1*

这与标准Margin和对齐属性几乎允许任何可以想象的布局......这只是一个控件!

编辑:

我可能会补充一点,虽然大多数人都不使用愚蠢的分辨率但令人惊讶的是有多少人仍在运行1024x768或运行宽屏中分辨率显示器,其垂直分辨率低于800像素,所以唯一的方法是一定要测试!

答案 3 :(得分:1)

  

问题1:我的问题是WPF如何管理独立于分辨率的属性?

来自MSDN的


与分辨率无关且与设备无关的图形。 WPF图形系统中的基本测量单位是与设备无关的像素,无论实际屏幕分辨率如何,均为1/96英寸,并提供独立于分辨率和与设备无关的渲染的基础。每个与设备无关的像素会自动缩放以匹配其渲染系统的每英寸点数(dpi)设置。

  

问题2:如果用作背景,图像的质量将如何影响(它会在高分辨率下扭曲还是保持清晰度)?

我想这主要取决于给定图片的质量。高质量的图像在缩放时不会松动。

我建议阅读以下文章:

Introduction to WPF你会发现wpf比依赖的分辨率更多(DataBinding,布局,样式,模板,2D,3D,动画......)

Imaging Overview WPF Graphics Rendering Overview