什么时候应该使用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>