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 UseLayoutRounding que tiene la propiedad en una sola línea de ancho de píxel.The following example demonstrates the effect that the UseLayoutRounding property has on a single pixel-width line. La línea de la izquierda no utiliza el redondeo del diseño y la línea de la derecha usa 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 lentamente, puede ver la diferencia que realiza el redondeo del 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 la UseLayoutRounding propiedad de un elemento es true, todos los valores de píxel no enteros que se calculan Measure durante Arrange las pasadas y se redondean a los valores de píxel completos.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 la heredan los elementos secundarios.This property is inherited by child elements.

Nota

Debe establecer UseLayoutRounding true en 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 primarias no se encuentran en un límite de píxeles, las coordenadas secundarias tampoco se encuentran 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, SnapsToDevicePixels establezca en el elemento secundario para obtener el efecto que desea.If UseLayoutRounding cannot be set at the root, set SnapsToDevicePixels on the child to obtain the effect that you want.

Los objetos de dibujo en límites de píxeles eliminan los bordes semitransparentes producidos por el 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. En la ilustración siguiente se muestra la salida de una sola línea de ancho de píxel que se encuentra en medio 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 usa el redondeo del diseño y tiene suavizado de contorno.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.

Línea-suavizada en comparación con la línea de un solo píxel.Anti-aliased line compared to single pixel line.

Al usar el redondeo y Star el tamaño del diseño, el sistema de diseño crea pequeñas variaciones en las medidas 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 cada una de Startamaño, en lugar de crear tres columnas que tienen el mismo ancho de 33,3, el sistema de diseño crea dos columnas con un ancho de 33 y una anchura 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 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 versión de .NET Framework de destino es .NET Framework 4,6 o superior.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 solo surte efecto cuando la aplicación se ejecuta en el .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