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

任何人都可以build议什么时候使用WPF 4.0中的SnapsToDevicePixels指南?

是否应该只在有问题的情况下偶尔使用,在整个应用程序中,只在某些控件上或者什么?

Spencer和Martin对于何时alignment像素有很好的回答。

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

UseLayoutRounding使您与Silverlight兼容( SnapsToDevicePixels在Silverlight中不可用)…而且Microsoft也鼓励在其文档中使用UseLayoutRounding不是SnapsToDevicePixels

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

尽pipe如此,仍然有理由使用SnapsToDevicePixels 。 实际上,MSDN文档指向一个。 我将添加另一个:它只与SnapsToDevicePixels ,你可以使用准则进行精确控制。

下面是关于这个问题的一些资源(即图像,文本和图像的像素捕捉和清晰度):

  • UIElement.SnapsToDevicePixels属性的MSDN文档。
  • FrameworkElement.UseLayoutRounding属性的MSDN文档。
  • 这里是由Dwayne需要模糊的图像的旧的,经典的职位。
  • 有时BitmapScalingMode有助于图像清晰度。
  • 一个伟大的博客文章,向您展示如何实际使用SnapsToDevicePixels。 这可能会很棘手。
  • WPF文本小组撰写的一篇博客文章,介绍了他们添加到WPF 4.0中的所有不同的改进,以帮助文本更加清晰。
  • WPF Text团队的另一篇博客文章围绕布局。

嘿。 我知道我的回答比你要求的要多一点,但是这个概念(例如,解决scheme的独立性和由此产生的问题,以及如何克服它们)通常是使用WPF时的一个沮丧点。 至less,我想指出你新的WPF 4.0属性, UseLayoutRounding

UPDATE

我只是不得不添加,因为我已经看到这一遍又一遍…有时SnapsToDevicePixels工作时, UseLayoutRounding不。 我希望我能指出为什么这是这种情况,但肯定先尝试UseLayoutRounding,如果这不起作用,不要犹豫,试试SnapsToDevicePixels

那条线太锋利了,可以切断你!

它应该用于控件或像素位置有意义的区域。 与绘图应用程序的canvas相关的控件就是一个例子。 你有没有看过一个零散的驱动器的地图? 这可能是另一个例子。

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

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

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

只是注意到这对边界非常有用。 附加信息在这里 。

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