FrameworkElement.UseLayoutRounding Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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.
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
. De manera predeterminada, es false
.
Ejemplos
En el ejemplo siguiente se muestra el efecto que la UseLayoutRounding propiedad tiene en una sola línea de ancho de píxel. La línea de la izquierda no usa el redondeo de diseño y la línea de la derecha usa el redondeo de diseño. Si cambia el tamaño lentamente de la ventana, puede ver la diferencia que hace el redondeo del diseño.
<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íxeles no enteros que se calculan durante los Measure pasos y Arrange se redondean a valores de píxel enteros.
Los elementos secundarios heredan esta propiedad.
Nota
Debe establecer UseLayoutRoundingtrue
en en el elemento raíz. El sistema de diseño agrega coordenadas secundarias a las coordenadas primarias; por lo tanto, si las coordenadas primarias no están en un límite de píxeles, las coordenadas secundarias tampoco están en un límite de píxeles. Si UseLayoutRounding no se puede establecer en la raíz, establezca SnapsToDevicePixels en el elemento secundario para obtener el efecto que desee.
Dibujar objetos en límites de píxeles elimina los bordes semitransparentes producidos por el suavizado de contorno, cuando un borde cae en medio de un píxel del dispositivo. 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 del dispositivo. La línea de la izquierda no usa el redondeo de diseño y tiene contornos. La línea de la derecha usa el redondeo de diseño.
Cuando se usa el redondeo y Star el ajuste de 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 subpixeles. Por ejemplo, si una cuadrícula tiene un ancho total de 100 con 3 columnas cada una de tamaño Star, en lugar de crear tres columnas con 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.
Nota
En .NET 4.6 se realizaron cambios en el redondeo de diseño para reducir las instancias de recorte en controles con bordes. De forma predeterminada, esta característica está habilitada si la plataforma de destino es .NET Framework 4.6 o posterior. Las aplicaciones destinadas a versiones anteriores del marco 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 .NET Framework 4.6.