FrameworkElement.UseLayoutRounding Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém ou define um valor que indica se o arredondamento de layout deve ser aplicado ao tamanho e posição desse elemento durante o 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
Valor da propriedade
true
se o arredondamento de layout for aplicado; caso contrário, false
. O padrão é false
.
Exemplos
O exemplo a seguir demonstra o efeito que a UseLayoutRounding propriedade tem em uma única linha de largura de pixel. A linha à esquerda não usa arredondamento de layout e a linha à direita usa arredondamento de layout. Se você redimensionar lentamente a janela, poderá ver a diferença que o arredondamento de layout faz.
<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>
Comentários
Quando a UseLayoutRounding propriedade de um elemento é true
, todos os valores de pixel não integrais calculados durante o Measure e Arrange os passes são arredondados para valores de pixel inteiros.
Essa propriedade é herdada por elementos filho.
Observação
Você deve definir UseLayoutRounding como true
no elemento raiz. O sistema de layout adiciona coordenadas filho às coordenadas pai; portanto, se as coordenadas pai não estiverem em um limite de pixel, as coordenadas filho também não estarão em um limite de pixel. Se UseLayoutRounding não puder ser definido na raiz, defina SnapsToDevicePixels no filho para obter o efeito desejado.
Desenhar objetos em limites de pixel elimina as bordas semi-transparentes produzidas por anti-aliasing, quando uma borda cai no meio de um pixel de dispositivo. A ilustração a seguir mostra a saída de uma única linha de largura de pixel que cai no meio de um pixel de dispositivo. A linha à esquerda não usa arredondamento de layout e é anti-aliased. A linha à direita usa arredondamento de layout.
Quando você usa arredondamento e Star dimensionamento de layout, o sistema de layout cria pequenas variações nas medidas de coluna ou linha para evitar a renderização de subpixel. Por exemplo, se uma grade tiver uma largura total de 100 com 3 colunas de cada tamanho Star, em vez de criar três colunas que tenham uma largura igual a 33,3, o sistema de layout criará duas colunas que têm uma largura de 33 e uma com largura de 34.
Observação
No .NET 4.6, foram feitas alterações no arredondamento de layout para reduzir instâncias de recorte em controles com bordas. Por padrão, esse recurso será habilitado se a Estrutura de Destino for .NET Framework 4.6 ou superior. Os aplicativos destinados a versões anteriores da estrutura podem aceitar o novo comportamento adicionando a seguinte configuração a um arquivo de app.config: <runtime><AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"/></runtime>
A configuração só entra em vigor quando o aplicativo está em execução no .NET Framework 4.6.