谁能建议在WPF 4.0中何时使用SnapsToDevicePixels的准则?

是否仅在出现问题的情况下才偶尔使用它(在整个App中),仅在某些控件上或什么情况下使用?

最佳答案

当对齐像素时,Spencer和Martin对于给出了很好的答案。

关于,如何使用:我还要指出,在WPF 4.0中,应该尝试使用属性UseLayoutRounding 而不是SnapsToDevicePixels
UseLayoutRounding使您正在做的事情与Silverlight兼容(Silverlight中不提供SnapsToDevicePixels)...并且Microsoft也在鼓励在其documentation中使用UseLayoutRounding而不是SnapsToDevicePixels

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

综上所述,仍然有理由使用SnapsToDevicePixels。实际上,MSDN文档指向其中之一。我还要补充一点:只有SnapsToDevicePixels才可以使用准则进行精确控制。

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

  • The MSDN Documentation for the UIElement.SnapsToDevicePixels Property.
  • The MSDN Documentation for the FrameworkElement.UseLayoutRounding Property.
  • Here is the old, classic post by Dwayne Need on blurry images.
  • Sometimes BitmapScalingMode helps with image clarity.
  • A great blog post that shows you how to actually use SnapsToDevicePixels. It can be tricky.
  • A blog post by the WPF Text team about all the different improvements they added to WPF 4.0 in order to help text clarity.
  • Another blog post by the WPF Text team on layout rounding.

  • 嘿。我知道我的回答远远超过您的要求...但是在使用WPF时,这个概念(即分辨率独立性及其带来的问题以及如何克服这些问题)通常是frustration的重点。至少,我想将您指向新的WPF 4.0属性UseLayoutRounding

    更新

    我只需要添加,因为我已经一遍又一遍地看到了这一点...有时候SnapsToDevicePixelsUseLayoutRounding不起作用时起作用。我希望我能指望为什么会这样,但是绝对可以先尝试UseLayoutRounding,如果那行不通,请立即尝试SnapsToDevicePixels

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

    09-06 16:35