Compartilhar via


FrameworkElement.UseLayoutRounding Propriedade

Definição

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

Boolean

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.

Linha de alias anti-em comparação com uma única linha de pixel.

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.

Aplica-se a