【发布时间】:2010-03-08 06:48:32
【问题描述】:
任何人都可以就何时在 WPF 4.0 中使用 SnapsToDevicePixels 提出建议吗?
是否应该仅在出现问题时偶尔使用,在整个应用程序中随意使用,仅在某些控件上使用?
【问题讨论】:
-
我喜欢认为干净、明快的线条让您的应用程序感觉专业和整洁。因此,我的建议是在有助于实现该目标的任何地方使用它。
标签: .net wpf snapstodevicepixels
任何人都可以就何时在 WPF 4.0 中使用 SnapsToDevicePixels 提出建议吗?
是否应该仅在出现问题时偶尔使用,在整个应用程序中随意使用,仅在某些控件上使用?
【问题讨论】:
标签: .net wpf snapstodevicepixels
Spencer 和 Martin 关于何时对齐像素的回答很好。
至于如何:我还要指出,应该在 WPF 4.0 尝试使用属性 UseLayoutRounding 而不是 @ 987654331@.
UseLayoutRounding 使您正在做的事情与 Silverlight 兼容(SnapsToDevicePixels 在 Silverlight 中不可用)......微软还鼓励在其 documentation 中使用 UseLayoutRounding 而不是 SnapsToDevicePixels。
这两者有什么区别?嗯,一个很大的区别是UseLayoutRounding 出现在布局阶段,而SnapsToDevicePixels 出现在渲染阶段。这让我推测UseLayoutRounding 可能是一种更高效的方式(不过我还没有证实这一点)。
话虽如此,仍然有理由使用SnapsToDevicePixels。事实上,MSDN 文档指向一个。我再补充一点:只有SnapsToDevicePixels 才能使用指南进行精确控制。
这里有一些关于这个问题的资源(即像素捕捉和图像、文本和视觉效果的清晰度):
嘿嘿。我知道我的答案比您要求的要多一点……但是在使用 WPF 时,这个概念(即分辨率独立性及其带来的问题以及如何克服这些问题)通常是frustration 的重点.至少,我想向您指出新的 WPF 4.0 属性,UseLayoutRounding。
更新
我只需要补充一下,因为我已经一遍又一遍地看到这个......有时SnapsToDevicePixels 有效,而UseLayoutRounding 无效。我希望我能弄清楚为什么会这样,但一定要先尝试 UseLayoutRounding,如果这不起作用,请不要犹豫,试试 SnapsToDevicePixels。
那条线太锋利了,可以割伤你!
【讨论】:
它应该用于像素位置有意义的控件或区域。与绘图应用程序的画布相关的控件就是一个示例。你见过碎片驱动器的地图吗?这可能是另一个例子。
我能想到的一个例外是当您使用某种分隔线时。大多数人希望边界线是实心的。如果关闭此设置,它们可能会显得模糊和分散注意力。
基本上如果边缘模糊 = 不好,则打开它
【讨论】:
SnapsToDevicePixels = true 以消除模糊)。
一种情况是,如果您正在显示图像或视频。如果您不捕捉设备像素(即视频屏幕的像素),则使用一些算法(插值、抗锯齿)将图像的像素定位在屏幕像素“之间”,并且显示的内容不会看起来和原始图像一样好。图像会失去一些清晰度。
【讨论】:
刚刚注意到它对边框非常有用。附加信息here。
<Style TargetType="Border" >
<Setter Property="SnapsToDevicePixels" Value="True" />
</Style>
【讨论】: