7

这更多是出于好奇。我正在研究 WPF 应用程序与分辨率无关。这是否意味着我们不必担心显示器的分辨率大小?因为作为一名 Windows 应用程序开发人员,我面临着使应用程序与不同分辨率兼容的几个挑战。

我的问题是 WPF 如何管理与分辨率无关的属性?我们是否需要提供控制出现的比率?如果用作背景,图像的质量会受到怎样的影响(在高分辨率下会失真还是保持清晰度)?

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

4

4 回答 4

7

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

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

于 2013-09-10T08:08:35.520 回答
5

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 都会正确显示。

于 2013-09-10T09:59:17.627 回答
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 像素的宽屏中分辨率显示器,所以唯一可以确定的方法是去测试!

于 2013-09-10T08:25:09.737 回答
1

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

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

问题2:如果用作背景,图像的质量会受到怎样的影响(在高分辨率下会失真还是保持清晰度)?

我想这主要取决于给定图片的质量。高质量的图像在缩放时不会失去清晰度。

我建议阅读以下文章:

WPF 简介,您将了解到 wpf 不仅仅依赖于分辨率(数据绑定、布局、样式、模板、2D、3D、动画......)

成像概述 WPF 图形渲染概述

于 2013-09-10T13:55:54.463 回答