Поделиться через


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

Значение свойства

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

Это свойство наследуется дочерними элементами.

Замечание

Необходимо задать для UseLayoutRoundingtrue корневого элемента. Система макета добавляет дочерние координаты в родительские координаты; Таким образом, если родительские координаты не находятся на границе пикселя, дочерние координаты также не находятся на границе пикселя. Если UseLayoutRounding не удается установить в корневом каталоге, установите SnapsToDevicePixels на дочернем элементе нужный эффект.

Рисование объектов на границах пикселей устраняет полупрозрачные края, созданные с помощью псевдонима, когда край падает в середине пикселя устройства. На следующем рисунке показаны выходные данные одной линии ширины пикселей, которая падает в середине пикселя устройства. Линия слева не использует округление макета и является анти-псевдонимом. В правой строке используется округление макета.

По сравнению с одной строкой пикселей с псевдонимом.

При использовании округления макета и Star изменения размера система макета создает небольшие вариации в измерениях столбцов или строк, чтобы избежать отрисовки подпикселя. Например, если сетка имеет общую ширину 100 с 3 столбцами каждого размера Star, вместо создания трех столбцов с равной шириной 33,3, система макета создает 2 столбца с шириной 33 и одной с шириной 34.

Замечание

В .NET 4.6 были внесены изменения в округление макета, чтобы уменьшить экземпляры обрезки в элементах управления с границами. По умолчанию эта функция включена, если целевая платформа — .NET Framework 4.6 или более поздней версии. Приложения, предназначенные для более ранних версий платформы, могут принять участие в новом поведении, добавив следующий параметр в файл app.config: <runtime><AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"/></runtime> параметр действует только при запуске приложения на платформе .NET Framework 4.6.

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