FrameworkElement.UseLayoutRounding Property

Definition

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

Property Value

Boolean

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

Examples

En el ejemplo siguiente se muestra el efecto que tiene la propiedad UseLayoutRounding 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>  

Remarks

Cuando se truela propiedad UseLayoutRounding de un elemento, todos los valores de píxel no integrales que se calculan durante las pasadas Measure y Arrange se redondean a valores de píxeles 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.

Note

Debe establecer UseLayoutRounding en 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 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 no se puede establecer UseLayoutRounding en la raíz, establezca SnapsToDevicePixels 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.

Cuando se usa el redondeo del diseño y Star el tamañ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 las cuales tiene un tamaño Star, en lugar de crear tres columnas con un ancho igual 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.

Note

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.

Applies to