FrameworkElement.UseLayoutRounding FrameworkElement.UseLayoutRounding FrameworkElement.UseLayoutRounding FrameworkElement.UseLayoutRounding Property

Definición

Obtiene o establece un valor que indica si el redondeo del diseño se debe aplicar a este tamaño y posición del elemento durante el diseño.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 de propiedad

true si se aplica el redondeo del diseño; en caso contrario, false.true if layout rounding is applied; otherwise, false. De manera predeterminada, es false.The default is false.

Ejemplos

En el ejemplo siguiente se muestra el efecto que el UseLayoutRounding tiene propiedad en una línea de ancho de píxel único.The following example demonstrates the effect that the UseLayoutRounding property has on a single pixel-width line. La línea de la izquierda no usa el redondeo del diseño y la línea de la derecha utiliza el redondeo del diseño.The line on the left does not use layout rounding and the line on the right uses layout rounding. Si cambia el tamaño de la ventana con lentitud, puede ver la diferencia que aporta el redondeo de diseño.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>  

Comentarios

Cuando el UseLayoutRounding es propiedad de un elemento true, todos los valores de píxel no enteros que se calculan durante el Measure y Arrange pasadas se redondean a valores de píxel completo.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.

Esta propiedad es heredada por los elementos secundarios.This property is inherited by child elements.

Nota

Debe establecer UseLayoutRounding a true en el elemento raíz.You should set UseLayoutRounding to true on the root element. El sistema de diseño agrega coordenadas secundarias a las coordenadas primarias; por lo tanto, si las coordenadas del elemento primario no están en un límite de píxeles, las coordenadas secundarias también no están en un límite de píxeles.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. Si UseLayoutRounding no se puede establecer en la raíz, establezca SnapsToDevicePixels en el elemento secundario para obtener el efecto que desee.If UseLayoutRounding cannot be set at the root, set SnapsToDevicePixels on the child to obtain the effect that you want.

Dibujar objetos en los límites de píxeles elimina los bordes semitransparentes producidos por suavizado de contorno, cuando un borde cae en medio de un píxel 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. La siguiente ilustración muestra el resultado de una línea de ancho de píxel único que queda dentro de un píxel de dispositivo.The following illustration shows the output of a single pixel-width line that falls in the middle of a device pixel. La línea de la izquierda no utiliza el redondeo del diseño y es AntiAlias.The line on the left does not use layout rounding and is anti-aliased. La línea de la derecha utiliza el redondeo del diseño.The line on the right uses layout rounding.

Anti-línea con alias en comparación con solo pixel. Anti-aliased line compared to single pixel line.

Cuando se usa el redondeo del diseño y Star cambio de tamaño, el sistema de diseño crea variaciones pequeñas en las mediciones de columna o fila para evitar la representación de subpíxeles.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 ejemplo, si una cuadrícula tiene un ancho total de 100, con 3 columnas de tamaño Star, en lugar de crear tres columnas que tienen un ancho igual de 33,3, el sistema de diseño crea 2 columnas que tienen un ancho de 33 y otro que tiene un ancho 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.

Nota

En .NET 4.6 se realizaron cambios en el redondeo del diseño para reducir las instancias de recorte en los controles con los bordes.In .NET 4.6 changes were made to layout rounding to reduce instances of clipping in controls with borders. De forma predeterminada, esta característica está habilitada si la plataforma de destino es .NET Framework 4.6 o posterior.By default, this feature is enabled if your Target Framework is .NET Framework 4.6 or higher. Las aplicaciones que tienen como destino versiones anteriores de framework pueden participar en el nuevo comportamiento agregando la siguiente configuración a un archivo app.config: <runtime><AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"/></runtime> La configuración sólo surte efecto cuando la aplicación se ejecuta en .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.

Se aplica a