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>  

Комментарии

Если свойство элемента имеет trueзначение, все Нецелочисленные значения пикселей Measure , вычисляемые во время прохода и Arrange , округляются до целых значений пикселей. UseLayoutRoundingWhen 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 с тремя столбцами каждого размера 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 — .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.

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