FrameworkElement.UseLayoutRounding Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene o imposta un valore che indica se l'arrotondamento del layout deve essere applicato alla posizione e alle dimensioni dell'elemento durante il 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
Valore della proprietà
true
se l'arrotondamento del layout è applicato; in caso contrario, false
. Il valore predefinito è false
.
Esempio
Nell'esempio seguente viene illustrato l'effetto che la UseLayoutRounding proprietà ha su una singola riga di larghezza pixel. La riga a sinistra non usa l'arrotondamento del layout e la riga a destra usa l'arrotondamento del layout. Se si ridimensiona lentamente la finestra, è possibile visualizzare la differenza che il layout arrotondamento rende.
<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>
Commenti
Quando la UseLayoutRounding proprietà per un elemento è true
, tutti i valori pixel non integrali calcolati durante i Measure passaggi e Arrange vengono arrotondati a valori interi pixel.
Questa proprietà viene ereditata dagli elementi figlio.
Nota
È consigliabile impostare UseLayoutRounding su true
sull'elemento radice. Il sistema di layout aggiunge coordinate figlio alle coordinate padre; pertanto, se le coordinate padre non si trovano in un limite pixel, le coordinate figlio non si trovano anche su un limite di pixel. Se UseLayoutRounding non è possibile impostare nella radice, impostare SnapsToDevicePixels sul figlio per ottenere l'effetto desiderato.
Il disegno di oggetti sui limiti pixel elimina i bordi semi-trasparenti generati dall'anti-aliasing, quando un bordo cade al centro di un pixel del dispositivo. Nella figura seguente viene illustrato l'output di una singola linea di larghezza pixel che si trova al centro di un pixel del dispositivo. La riga a sinistra non usa l'arrotondamento del layout ed è anti-alias. La riga a destra usa l'arrotondamento del layout.
Quando si usa l'arrotondamento del layout e Star il ridimensionamento, il sistema di layout crea piccole variazioni nelle misurazioni di colonna o riga per evitare il rendering di subpixel. Ad esempio, se una griglia ha una larghezza totale di 100 con 3 colonne ognuna di dimensioni Star, anziché creare tre colonne con una larghezza uguale a 33.3, il sistema di layout crea 2 colonne che hanno una larghezza di 33 e una che ha una larghezza di 34.
Nota
In .NET 4.6 sono state apportate modifiche al layout arrotondamento per ridurre le istanze di ritaglio nei controlli con bordi. Per impostazione predefinita, questa funzionalità è abilitata se target Framework è .NET Framework 4.6 o versione successiva. Le applicazioni destinate alle versioni precedenti del framework possono acconsentire esplicitamente al nuovo comportamento aggiungendo l'impostazione seguente a un file di app.config: <runtime><AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"/></runtime>
l'impostazione ha effetto solo quando l'applicazione è in esecuzione in .NET Framework 4.6.