FrameworkElement.UseLayoutRounding 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置一个值,该值指示是否应向此元素的大小和位置布局应用布局舍入。
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
属性值
如果应用了布局舍入,则为 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 上运行时,此设置才会生效。