Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 我应该在WPF 4.0中何时使用SnapsToDevicePixels?_.net_Wpf_Snapstodevicepixels - Fatal编程技术网

.net 我应该在WPF 4.0中何时使用SnapsToDevicePixels?

.net 我应该在WPF 4.0中何时使用SnapsToDevicePixels?,.net,wpf,snapstodevicepixels,.net,Wpf,Snapstodevicepixels,有谁能建议在WPF 4.0中何时使用SnapsToDevicePixels 如果在整个应用程序中,仅在某些控件或什么上出现问题时才偶尔使用它吗?一种情况是,如果您正在显示图像或视频。如果您不捕捉设备像素(即视频屏幕的像素),则会使用某种算法(插值、消除混叠)将图像像素定位在屏幕像素的“中间”,并且显示的内容看起来不会像原始图像那样好。图像将失去一些清晰度。应在像素位置有意义的控件或区域上使用。例如,与绘图应用程序的画布相关的控件。你有没有看过碎片驱动器的地图?这可能是另一个例子 我能想到的一个例

有谁能建议在WPF 4.0中何时使用
SnapsToDevicePixels


如果在整个应用程序中,仅在某些控件或什么上出现问题时才偶尔使用它吗?

一种情况是,如果您正在显示图像或视频。如果您不捕捉设备像素(即视频屏幕的像素),则会使用某种算法(插值、消除混叠)将图像像素定位在屏幕像素的“中间”,并且显示的内容看起来不会像原始图像那样好。图像将失去一些清晰度。

应在像素位置有意义的控件或区域上使用。例如,与绘图应用程序的画布相关的控件。你有没有看过碎片驱动器的地图?这可能是另一个例子

我能想到的一个例外是当你使用某种分隔线时。大多数人希望边界线是坚实的。如果禁用此设置,它们可能看起来模糊且分散注意力


基本上,如果模糊边缘=不好,则将其打开

Spencer和Martin关于对齐像素时的的回答很好

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

UseLayoutRounding
使您的操作与Silverlight兼容(
SnapsToDevicePixels
在Silverlight中不可用)。。。此外,微软还鼓励在its中使用
UseLayoutRounding
over
SnapsToDevicePixels

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

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

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

呵呵。我知道我的回答比你要求的要多一些。。。但是,在使用WPF时,这一概念(即分辨率独立性及其带来的问题以及如何克服这些问题)通常会成为一个重点。至少,我想向您指出新的WPF4.0属性,
UseLayoutRounding

更新

我必须补充一点,因为我已经一遍又一遍地看到了这一点。。。有时
SnapsToDevicePixels
UseLayoutRounding
不起作用时起作用。我希望我能指出为什么会出现这种情况,但一定要先尝试使用LayoutRounding,如果这不起作用,请毫不犹豫地尝试
SnapsToDevicePixels


那条线太尖了,会把你划破的

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



我喜欢认为简洁、清晰的线条让您的应用程序感觉专业、整洁。因此,我的建议是在任何有助于实现这一目标的地方使用它。在许多情况下,这是对我一直遇到的许多问题的一个很好的回答,特别是因为我请求获得一种感觉,即我最好将我的WPF/Linq to SQL应用程序移植到Silverlight/Linq toEF@Peretz可能不太明显。。。但打开它确实增加了一些必须做/计算的事情。如果你有大量的视觉效果,效果可能会很明显。不过,更可能的情况是,性能命中会在总体性能不佳的情况下丢失。您的意思可能是“如果边缘模糊,请启用它”(设置
SnapsToDevicePixels=true
以消除模糊)。
<Style TargetType="Border" >
        <Setter Property="SnapsToDevicePixels" Value="True" />
</Style>