FrameworkElement.UseLayoutRounding Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Recebe ou define um valor que indica se o arredondamento do layout deve ser aplicado ao tamanho e posição deste 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 de Propriedade
true se for aplicado arredondamento de layout; caso contrário, false. A predefinição é false.
Exemplos
O exemplo seguinte demonstra o efeito que a UseLayoutRounding propriedade tem numa única linha de largura de píxel. A linha da esquerda não usa arredondamento de layout e a linha da direita usa arredondamento de layout. Se fores redimensionando lentamente a janela, podes ver a diferença que o arredondamento do 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>
Observações
Quando a UseLayoutRounding propriedade de um elemento é true, todos os valores de píxeis não inteiros que são calculados durante as passagens Measure e Arrange são arredondados para valores inteiros de píxeis.
Esta propriedade é herdada pelos elementos filhos.
Note
Deves definir UseLayoutRounding para true no elemento raiz. O sistema de layout adiciona coordenadas filhas às coordenadas progenitoras; portanto, se as coordenadas progenitores não estiverem numa fronteira de píxel, as coordenadas filhas também não estão numa fronteira de píxel. Se UseLayoutRounding não puder ser definido na raiz, defina SnapsToDevicePixels no filho para obter o efeito que deseja.
Desenhar objetos nas fronteiras dos píxeis elimina as arestas semi-transparentes produzidas pelo anti-aliasing, quando uma aresta cai no meio do pixel do dispositivo. A ilustração seguinte mostra a saída de uma única linha de largura de píxel que cai no meio de um pixel do dispositivo. A linha à esquerda não utiliza arredondamento de layout e é anti-aliasing. A linha à direita utiliza arredondamento de layout.
Quando utiliza arredondamento e Star dimensionamento de layout, o sistema de layout cria pequenas variações nas medições das colunas ou linhas para evitar a renderização de subpíxeis. Por exemplo, se uma grelha tem uma largura total de 100 com 3 colunas cada de tamanho Star, em vez de criar três colunas com largura igual a 33,3, o sistema de layout cria 2 colunas com largura 33 e outra com largura 34.
Note
No .NET 4.6, foram feitas alterações ao arredondamento do layout para reduzir casos de clipping nos controlos com bordas. Por defeito, esta funcionalidade está ativada se o seu Target Framework for o .NET Framework 4.6 ou superior. Aplicações que visam versões anteriores do framework podem aderir ao novo comportamento adicionando a seguinte configuração a um ficheiro app.config: <runtime><AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"/></runtime> A configuração só entra em vigor quando a aplicação está a correr no .NET Framework 4.6.