FrameworkElement.UseLayoutRounding FrameworkElement.UseLayoutRounding FrameworkElement.UseLayoutRounding FrameworkElement.UseLayoutRounding Property

Определение

Получает или задает значение, указывающее, должно ли применяться округление макета для размера и позиции данного элемента во время структурирования.Gets or sets a value that indicates whether layout rounding should be applied to this element's size and position during layout.

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.true if layout rounding is applied; otherwise, false. Значение по умолчанию — false.The default is false.

Примеры

В следующем примере демонстрируется эффект, UseLayoutRounding свойство имеет один пиксель нулевой ширины строки.The following example demonstrates the effect that the UseLayoutRounding property has on a single pixel-width line. Строки в левой части использует округление макета, в строке, в правой части используется округление макета.The line on the left does not use layout rounding and the line on the right uses layout rounding. Если медленно изменения размера окна, можно увидеть разницу, округлением макета.If you slowly resize the window, you can see the difference that layout rounding makes.


<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, все пикселей не целочисленные значения, которые вычисляются во время Measure и Arrange передает округляются до целых значений пикселей.When the UseLayoutRounding property for an element is true, all non-integral pixel values that are calculated during the Measure and Arrange passes are rounded to whole pixel values.

Это свойство наследуется дочерними элементами.This property is inherited by child elements.

Примечание

Необходимо задать UseLayoutRounding для true в корневом элементе.You should set UseLayoutRounding to true on the root element. Система макета добавляет координаты дочернего координат родительского; Таким образом Если координаты родительского элемента не на границе пикселов, координаты дочернего, также не на границе пикселей.The layout system adds child coordinates to the parent coordinates; therefore, if the parent coordinates are not on a pixel boundary, the child coordinates are also not on a pixel boundary. Если UseLayoutRounding не может быть в корне, задайте SnapsToDevicePixels дочерних элементов для получения необходимого эффекта.If UseLayoutRounding cannot be set at the root, set SnapsToDevicePixels on the child to obtain the effect that you want.

Графические объекты на границах пикселей устраняет полупрозрачные края, производимые сглаживания, когда границы попадает в середину пикселя устройства.Drawing objects on pixel boundaries eliminates the semi-transparent edges that are produced by anti-aliasing, when an edge falls in the middle of a device pixel. Ниже показаны выходные данные из одного пикселя нулевой ширины строки, попадает в середину пикселя устройства.The following illustration shows the output of a single pixel-width line that falls in the middle of a device pixel. В строке в левой части не использует округление макета и является сглаженными.The line on the left does not use layout rounding and is anti-aliased. Строка справа использует округление макета.The line on the right uses layout rounding.

Противодействия-псевдоним линия в сравнении с одной точки строки. Anti-aliased line compared to single pixel line.

При использовании округление макета и Star определения размера, система макета создает небольшие вариации в измерениях столбцов или строк, чтобы избежать субпиксельной визуализации.When you use layout rounding and Star sizing, the layout system creates small variations in the column or row measurements to avoid subpixel rendering. Например, если сетка содержит шириной 100 с 3 столбцами размера Star, вместо создания трех столбцов, имеющих ширину 33,3, система макета создает 2 столбцов, имеющих ширину 33 и один шириной 34.For example, if a grid has a total width of 100 with 3 columns each of size Star, instead of creating three columns that have an equal width of 33.3, the layout system creates 2 columns that have a width of 33 and one that has a width of 34.

Примечание

В .NET 4.6 для снижения числа вхождений обрезки в элементах управления с границами в округление макетов внесены изменения.In .NET 4.6 changes were made to layout rounding to reduce instances of clipping in controls with borders. По умолчанию эта функция включена, если целевой платформой является .NET Framework 4.6 или более поздней.By default, this feature is enabled if your Target Framework is .NET Framework 4.6 or higher. Приложений, предназначенных для более ранних версий платформы, можно выбрать новое поведение, добавив следующий параметр в файл app.config: <runtime><AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"/></runtime> Настройка оказывает эффект только в том случае, когда приложение выполняется на платформе .NET Framework 4.6.Applications that target earlier versions of the framework can opt in into the new behavior by adding the following setting to an app.config file: <runtime><AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"/></runtime> The setting only takes effect when the application is running on the .NET Framework 4.6.

Применяется к