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.Gets or sets a value that indicates whether layout rounding should be applied to this element's size and position during 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.true if layout rounding is applied; otherwise, false. O padrão é false.The default is false.

Exemplos

O exemplo a seguir demonstra o efeito que a propriedade UseLayoutRounding tem em uma única linha de largura de pixel.The following example demonstrates the effect that the UseLayoutRounding property has on a single pixel-width line. A linha à esquerda não usa o arredondamento de layout e a linha à direita usa o arredondamento de layout.The line on the left does not use layout rounding and the line on the right uses layout rounding. Se você redimensionar lentamente a janela, poderá ver a diferença que o arredondamento de layout faz.If you slowly resize the window, you can see the difference that layout rounding makes.

  
<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 propriedade UseLayoutRounding de um elemento é true, todos os valores de pixel não integral que são calculados durante a Measure e Arrange passam são arredondados para valores inteiros de pixel.When the UseLayoutRounding property for an element is true, all non-integral pixel values that are calculated during the Measure and Arrange passes are rounded to whole pixel values.

Essa propriedade é herdada por elementos filho.This property is inherited by child elements.

Observação

Você deve definir UseLayoutRounding como true no elemento raiz.You should set UseLayoutRounding to true on the root element. O sistema de layout adiciona coordenadas filhas à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.The layout system adds child coordinates to the parent coordinates; therefore, if the parent coordinates are not on a pixel boundary, the child coordinates are also not on a pixel boundary. Se UseLayoutRounding não puder ser definida na raiz, defina SnapsToDevicePixels no filho para obter o efeito desejado.If UseLayoutRounding cannot be set at the root, set SnapsToDevicePixels on the child to obtain the effect that you want.

Os objetos de desenho em limites de pixel eliminam as bordas transparentes que são produzidas pela suavização de serrilhado quando uma borda cai no meio de um pixel de dispositivo.Drawing objects on pixel boundaries eliminates the semi-transparent edges that are produced by anti-aliasing, when an edge falls in the middle of a device pixel. 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.The following illustration shows the output of a single pixel-width line that falls in the middle of a device pixel. A linha à esquerda não usa o arredondamento de layout e tem suavização de alias.The line on the left does not use layout rounding and is anti-aliased. A linha à direita usa o arredondamento de layout.The line on the right uses layout rounding.

Linha-AntiAlias comparada a uma linha de pixel única.Anti-aliased line compared to single pixel line.

Quando você usa arredondamento de layout e Star dimensionamento, o sistema de layout cria pequenas variações nas medidas de coluna ou linha para evitar renderização de subpixel.When you use layout rounding and Star sizing, the layout system creates small variations in the column or row measurements to avoid subpixel rendering. Por exemplo, se uma grade tiver uma largura total de 100 com 3 colunas em cada tamanho Star, em vez de criar três colunas que tenham uma largura igual de 33,3, o sistema de layout criará duas colunas com uma largura de 33 e outra que tenha uma largura de 34.For example, if a grid has a total width of 100 with 3 columns each of size Star, instead of creating three columns that have an equal width of 33.3, the layout system creates 2 columns that have a width of 33 and one that has a width of 34.

Observação

No .NET 4,6, foram feitas alterações no arredondamento de layout para reduzir as instâncias de recorte em controles com bordas.In .NET 4.6 changes were made to layout rounding to reduce instances of clipping in controls with borders. Por padrão, esse recurso será habilitado se sua estrutura de destino for .NET Framework 4,6 ou superior.By default, this feature is enabled if your Target Framework is .NET Framework 4.6 or higher. Os aplicativos que visam versões anteriores do Framework podem aceitar o novo comportamento adicionando a seguinte configuração a um arquivo app. config: <runtime><AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"/></runtime> a configuração entrar em vigor somente quando o aplicativo estiver em execução no .NET Framework 4,6.Applications that target earlier versions of the framework can opt in into the new behavior by adding the following setting to an app.config file: <runtime><AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"/></runtime> The setting only takes effect when the application is running on the .NET Framework 4.6.

Aplica-se a