2010-03-08 67 views
46

任何人都可以提出WPF 4.0中何时使用SnapsToDevicePixels的指导原则吗?什么时候应该使用WPF 4.0中的SnapsToDevicePixels?

它应该只在偶尔使用,如果有问题,在应用程序中宽泛地使用,仅限于某些控件或什么?

+3

我喜欢认为干净清爽的线条让您的应用感觉专业和修剪整齐。所以,我的建议是在任何有助于实现这一目标的地方使用它。 – cplotts 2010-04-08 17:16:02

回答

73

斯宾塞和马丁对的好的答案当来对齐你的像素。

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

UseLayoutRounding,使你在做什么使用Silverlight兼容(SnapsToDevicePixels是不是在Silverlight中可用)...和微软也鼓励其在documentationSnapsToDevicePixels使用UseLayoutRounding

两者有什么区别?那么,一个很大的区别是,UseLayoutRounding发生在布局阶段,而SnapsToDevicePixels发生在渲染阶段。这让我推测UseLayoutRounding可能是一个更高性能的方法(虽然我没有证实这一点)。

就这么说,仍然有理由使用SnapsToDevicePixels。实际上,MSDN文档指向一个。我会再补充一点:只有SnapsToDevicePixels可以使用准则进行精确控制。

这里有一些关于这个问题的资源(即像素贴紧和清晰度的图像,文字和视觉效果):

heh。我知道我的回答比您要求的要多一点......但是这个概念(即解决方案独立性及其带来的问题以及如何克服它们)通常可以在使用WPF时使用frustration。至少,我想告诉你新的WPF 4.0属性,UseLayoutRounding

UPDATE

我只需要添加,因为我已经看到了这个一遍又一遍......有时SnapsToDevicePixels作品时UseLayoutRounding没有。我希望我能指出为什么会出现这种情况,但是首先尝试使用UseLayoutRounding,如果这不起作用,请不要犹豫,试试SnapsToDevicePixels

那条线很锋利可以切断你!

+0

更多=在许多情况下更好,这是我遇到的许多问题的一个很好的答案,尤其是因为我恳求让我感觉我最好将我的WPF/Linq to SQL应用程序移植到Silverlight/Linq到EF – 2010-04-09 01:20:37

+0

莫名其妙SnapsToDevicePixels = true真的压倒WPF的表现? – 2012-09-28 16:36:50

+1

@Peretz可能不明显......但打开它确实会增加必须完成/计算的内容。如果你有很多视觉效果,效果可能会很明显。然而,更有可能的是,性能普遍较差的情况下性能会下降。 – cplotts 2012-09-29 10:35:16

5

一种情况是您正在显示图像或视频。如果您没有捕捉到设备像素(即视频屏幕的像素),则使用某种算法(插值,反锯齿)将图像的像素“置于”屏幕像素之间,显示的内容不会显示与原始图像一样好。图像会失去一些清晰度。

8

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

我能想到的一个例外是当你使用某种分隔线时。虽然大多数人认为边界线如果这个设置关闭是稳定的,他们可能看起来模糊和分心。

基本上,如果模糊的边缘=坏,那就把它关掉。

+6

您可能的意思是*“如果边缘模糊 - 打开它*”(设置'SnapsToDevicePixels = true'以消除模糊)。 – Sinatr 2015-09-14 14:24:20

1

刚注意到它对边界非常有用。其他信息here

<Style TargetType="Border" > 
     <Setter Property="SnapsToDevicePixels" Value="True" /> 
</Style> 
相关问题