locked
FAQ: 什么是布局舍入以及如何在 WPF 4 中使用? RRS feed

  • 问题

  • 为了帮助大家更好地学习 WPF 技术,微软论坛技术支持团队编辑了一些列的 "WPF 常见问题及解答" 精华帖。

    本帖的主题是:什么是布局舍入以及如何在 WPF 4 中使用?

    如果您觉得这个帖子对您的学习、工作有所帮助,请再把这个帖子分享给你的同学、同事和朋友。

    如果您想阅读更多的 "WPF 常见问题及解答",请打开索引页面:

    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    2011年1月26日 14:03

答案

  • 当物体的边缘处于一个像素设备的中间时,DPI独立的图形系统会产生伪影,如模糊或者半透明边缘。之前版本的WPF包含像素捕捉功能来帮助解决这个问题。Silverlight 2引入了布局舍入,这是另外一种移动元素以使边缘落在整个像素边界的方法。WPF现在支持FrameworkElement附加属性UseLayoutRounding的边界舍入。在像素边界描绘物体可以消除当物体的边缘处于一个像素设备的中间时由伪影产生的半透明边缘。当你使用布局舍入时,布局系统在行列测量时产生微小的偏差以消除子像素渲染。

    下列代码使用UseLayoutRounding附加属性设置一个单像素宽的直线。当你缓慢改变窗体大小时,你可以看到布局舍入产生的差别。

    <StackPanel Width="150" Margin="7" Orientation="Horizontal">
      <!-- Single pixel line with layout rounding turned OFF.-->
      <Rectangle UseLayoutRounding="False" Width="45.6" Margin="10" Height="1" Fill="Red"/>
      
      <!-- Single pixel line with layout rounding turned ON.-->
      <Rectangle UseLayoutRounding="True" Width="45.6" Margin="10" Height="1" Fill="Red"/>
    </StackPanel>

    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    2011年1月26日 14:06