繁体   English   中英

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

[英]How resolution independence work in WPF?

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

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

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

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

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

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

ETA解决这个问题的另一种方法是澄清分辨率的含义 - 我猜1024 x 768实际上是'屏幕大小,以像素为单位',96dpi更准确地说是实际分辨率,而且它改变了这一点,WPF可以正确处理其他平台别; 如果您只需将800 x 600更改为1024 x 768,Winforms等和WPF都将正确显示。

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像素,因此唯一可以确定的方法是去测试!

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

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

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

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

我建议阅读以下文章:

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

成像概述 WPF图形渲染概述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM