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
Значение свойства
Значение 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
, все не целочисленные пиксельные значения, вычисляемые во время Measure и Arrange проходов, округляются до целых значений пикселей.
Это свойство наследуется дочерними элементами.
Примечание
Для корневого элемента необходимо задать значение UseLayoutRounding true
. Система макета добавляет дочерние координаты в родительские координаты; Таким образом, если родительские координаты не находятся на границе пикселя, дочерние координаты также не находятся на границе пикселя. Если 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.