什么时候应该在WPF 4.0中使用SnapsToDevicePixels?

时间:2010-03-08 06:48:33

标签: .net wpf snapstodevicepixels

有人可以建议何时在WPF 4.0中使用SnapsToDevicePixels吗?

只有在问题出现时才会偶尔使用它,在整个应用程序中,只能在某些控件或什么控件上使用?

4 个答案:

答案 0 :(得分:81)

Spencer和Martin对对齐像素的答案很好。

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

UseLayoutRounding使您与Silverlight兼容的内容(Silverlight中不提供SnapsToDevicePixels)...并且Microsoft也鼓励使用UseLayoutRounding而不是SnapsToDevicePixelsdocumentation

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

尽管如此,仍然有理由使用SnapsToDevicePixels。事实上,MSDN文档指向一个。我将添加另一个:只有SnapsToDevicePixels才能使用指南进行精确控制。

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

嘿。我知道我的答案比你要求的要多一些......但是这个概念(即分辨率独立性及其带来的问题以及如何克服它们)在工作时通常可以frustration点与WPF。至少,我想向您指出新的WPF 4.0属性UseLayoutRounding

<强>更新

我必须添加,因为我一遍又一遍地看到这一点......有时SnapsToDevicePixelsUseLayoutRounding没有时有效。我希望我能指出为什么会出现这种情况,但一定要先尝试使用UseLayoutRounding,如果不起作用,请不要犹豫尝试SnapsToDevicePixels

这条线非常锋利,可以切断你!

答案 1 :(得分:8)

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

我能想到的一个例外是当你使用某种分隔线时。大多数人都希望边界线是稳固的。如果此设置关闭,它们可能看起来模糊不清。

基本上,如果边缘模糊=坏,请将其打开

答案 2 :(得分:5)

一种情况是您要显示图像或视频。如果你没有捕捉到设备像素(即视频屏幕的像素),那么会使用一些算法(插值,消除锯齿)将图像的像素“放在”屏幕的像素之间,显示的内容不会显示和原始图像一样好。图像会失去一些清晰度。

答案 3 :(得分:1)

注意到它对Borders非常有用。其他信息here

<Style TargetType="Border" >
        <Setter Property="SnapsToDevicePixels" Value="True" />
</Style>