【问题标题】:When should I use SnapsToDevicePixels in WPF 4.0?何时应在 WPF 4.0 中使用 SnapsToDevicePixels?
【发布时间】:2010-03-08 06:48:32
【问题描述】:

任何人都可以就何时在 WPF 4.0 中使用 SnapsToDevicePixels 提出建议吗?

是否应该仅在出现问题时偶尔使用,在整个应用程序中随意使用,仅在某些控件上使用?

【问题讨论】:

  • 我喜欢认为干净、明快的线条让您的应用程序感觉专业和整洁。因此,我的建议是在有助于实现该目标的任何地方使用它。

标签: .net wpf snapstodevicepixels


【解决方案1】:

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

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

UseLayoutRounding 使您正在做的事情与 Silverlight 兼容(SnapsToDevicePixels 在 Silverlight 中不可用)......微软还鼓励在其 documentation 中使用 UseLayoutRounding 而不是 SnapsToDevicePixels

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

话虽如此,仍然有理由使用SnapsToDevicePixels。事实上,MSDN 文档指向一个。我再补充一点:只有SnapsToDevicePixels 才能使用指南进行精确控制。

这里有一些关于这个问题的资源(即像素捕捉和图像、文本和视觉效果的清晰度):

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

更新

我只需要补充一下,因为我已经一遍又一遍地看到这个......有时SnapsToDevicePixels 有效,而UseLayoutRounding 无效。我希望我能弄清楚为什么会这样,但一定要先尝试 UseLayoutRounding,如果这不起作用,请不要犹豫,试试 SnapsToDevicePixels

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

【讨论】:

  • 更多 = 在许多情况下更好,这是对我一直有的许多问题的一个很好的答案,特别是因为我乞求感觉我最好将我的 WPF/Linq 移植到 SQL 应用程序到 Silverlight/Linq 到 EF
  • @Peretz 可能并不明显......但打开它确实会增加一些必须完成/计算的事情。如果你有大量的视觉效果,也许效果会很明显。但是,更有可能的是,性能命中会在普遍较差的性能中丢失。
【解决方案2】:

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

我能想到的一个例外是当您使用某种分隔线时。大多数人希望边界线是实心的。如果关闭此设置,它们可能会显得模糊和分散注意力。

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

【讨论】:

  • 您的意思可能是“如果边缘模糊 - 打开它”(设置SnapsToDevicePixels = true 以消除模糊)。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    刚刚注意到它对边框非常有用。附加信息here

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      相关资源
      最近更新 更多