FrameworkElement.UseLayoutRounding 属性

定义

获取或设置一个值,该值指示是否应向此元素的大小和位置布局应用布局舍入。

public:
 property bool UseLayoutRounding { bool get(); void set(bool value); };
public bool UseLayoutRounding { get; set; }
member this.UseLayoutRounding : bool with get, set
Public Property UseLayoutRounding As Boolean

属性值

Boolean

如果应用了布局舍入,则为 true,否则为 false。 默认值为 false

示例

以下示例演示该 UseLayoutRounding 属性对单个像素宽度线条的效果。 左侧的线条不使用布局舍入,右侧的线条使用布局舍入。 如果慢慢调整窗口的大小,可以看到布局舍入所产生的差异。

<Page x:Class="LayoutRounding.Lines"  
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
    Title="Lines" Name="linesPage"  
    >  
  <StackPanel Width="150"  Margin="7" Orientation="Horizontal">  
    <!-- Single pixel line with layout rounding turned OFF.-->  
    <Rectangle UseLayoutRounding="False"  
       Width="45.5" Margin="10" Height="1" Fill="Red"/>  
    <!-- Single pixel line with layout rounding turned ON.-->  
    <Rectangle UseLayoutRounding="True"  
      Width="45.5" Margin="10" Height="1" Fill="Red"/>  
  </StackPanel>  
  <!-- Background Grid -->  
  <Page.Background>  
    <DrawingBrush  Viewport="0,0,10,10" ViewportUnits="Absolute" TileMode="Tile">  
      <DrawingBrush.Drawing>  
        <DrawingGroup>  
          <GeometryDrawing Brush="White">  
            <GeometryDrawing.Geometry>  
              <RectangleGeometry Rect="0,0,1,1" />  
            </GeometryDrawing.Geometry>  
          </GeometryDrawing>  
          <GeometryDrawing Geometry="M0,0 L1,0 1,0.1, 0,0.1Z " Brush="#CCCCFF" />  
          <GeometryDrawing Geometry="M0,0 L0,1 0.1,1, 0.1,0Z" Brush="#CCCCFF" />  
        </DrawingGroup>  
      </DrawingBrush.Drawing>  
    </DrawingBrush>  
  </Page.Background>  
</Page>  

注解

UseLayoutRounding当元素的属性为true时,在传递Arrange过程中Measure计算的所有非整型像素值都会舍入到整个像素值。

此属性由子元素继承。

备注

应设置为UseLayoutRoundingtrue根元素。 布局系统将子坐标添加到父坐标;因此,如果父坐标不在像素边界上,则子坐标也不在像素边界上。 如果 UseLayoutRounding 不能在根目录设置,请在子级上设置 SnapsToDevicePixels 以获取所需的效果。

在像素边界上绘制对象时,当边缘落在设备像素中间时,消除由抗锯齿生成的半透明边缘。 下图显示了位于设备像素中间的单像素宽度线的输出。 左侧的线条不使用布局舍入,反锯齿。 右侧的线条使用布局舍入。

与单个像素线相比,反-别名线。

使用布局舍入和 Star 调整大小时,布局系统会在列或行度量中创建较小的变体,以避免子像素呈现。 例如,如果网格的总宽度为 100,每个列各 Star有 3 列,而不是创建宽度等于 33.3 的三列,则布局系统将创建宽度为 33 且宽度为 34 的 2 列。

备注

在 .NET 4.6 中,对布局舍入进行了更改,以减少带有边框的控件中剪辑的实例。 默认情况下,如果目标框架.NET Framework 4.6 或更高版本,则启用此功能。 面向早期版本的框架的应用程序可以通过将以下设置添加到app.config文件来选择加入新行为:<runtime><AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"/></runtime>仅当应用程序在 .NET Framework 4.6 上运行时,此设置才会生效。

适用于