65

谁能建议何时SnapsToDevicePixels在 WPF 4.0 中使用的指南?

是否应该仅在出现问题时才偶尔使用,在整个应用程序中自由使用,仅在某些控件上使用还是什么?

4

4 回答 4

92

Spencer 和 Martin 关于何时对齐像素的好答案。

至于如何:我还要指出,应该在 WPF 4.0 中尝试使用该属性UseLayoutRounding而不是SnapsToDevicePixels.

UseLayoutRounding使您正在做的事情与 Silverlight 兼容(SnapsToDevicePixels在 Silverlight 中不可用)......微软也鼓励在其文档UseLayoutRounding中使用over 。SnapsToDevicePixels

两者有什么区别?嗯,一个很大的区别是UseLayoutRounding发生在布局阶段,而SnapsToDevicePixels发生在渲染阶段。这让我推测这UseLayoutRounding可能是一种更高效的方式(不过我还没有证实这一点)。

尽管如此,仍然有理由使用SnapsToDevicePixels. 事实上,MSDN 文档指向一个。我要补充一点:只有SnapsToDevicePixels这样,您才能使用指南进行精确控制。

以下是有关此问题的一些资源(即图像、文本和视觉效果的像素捕捉和清晰度):

呵呵。我知道我的回答比你所要求的要多一点......但是这个概念(即分辨率独立性和它带来的由此产生的问题以及如何克服它们)在使用 WPF 时通常会让人感到沮丧。至少,我想向您指出新的 WPF 4.0 属性,UseLayoutRounding.

更新

我只需要添加,因为我一遍又一遍地看到这个......有时SnapsToDevicePixelsUseLayoutRounding没有的情况下工作。我希望我能弄清楚为什么会这样,但一定要先尝试 UseLayoutRounding,如果这不起作用,请不要犹豫尝试SnapsToDevicePixels

那条线太锋利了,可以割伤你!

于 2010-04-08T17:12:03.800 回答
8

它应该用于像素位置有意义的控件或区域。与绘图应用程序的画布相关的控件就是一个示例。你见过碎片驱动器的地图吗?这可能是另一个例子。

我能想到的一个例外是当您使用某种分隔线时。大多数人希望边界线是实心的。如果关闭此设置,它们可能看起来模糊且分散注意力。

基本上,如果边缘模糊=不好,则将其打开

于 2010-03-08T07:02:28.087 回答
7

一种情况是您正在显示图像或视频。如果您不捕捉设备像素(即视频屏幕的像素),则使用一些算法(插值、抗锯齿)将图像的像素定位在屏幕像素“之间”,并且显示的内容不会看起来和原始图像一样好。图像会失去一些清晰度。

于 2010-03-08T07:00:52.313 回答
3

刚刚注意到它对边框非常有用。附加信息在这里

<Style TargetType="Border" >
        <Setter Property="SnapsToDevicePixels" Value="True" />
</Style>
于 2015-06-12T14:46:10.713 回答