FrameworkElement.UseLayoutRounding Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ruft einen Wert ab oder legt diesen fest, der angibt, ob die Layoutglättung auf die Größe und Position dieses Elements während des Layouts angewendet werden.
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
Eigenschaftswert
true
, wenn die Layoutglättung angewendet wird, andernfalls false
. Der Standardwert ist false
.
Beispiele
Im folgenden Beispiel wird der Effekt veranschaulicht, über den die UseLayoutRounding Eigenschaft in einer einzelnen Pixelbreitenlinie verfügt. Die Linie auf der linken Seite verwendet keine Layoutrunde, und die Linie auf der rechten Seite verwendet layoutrunden. Wenn Sie die Größe des Fensters langsam ändern, können Sie den Unterschied sehen, den das Layout rundet.
<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>
Hinweise
Wenn die UseLayoutRounding Eigenschaft für ein Element ist true
, werden alle nicht integralen Pixelwerte, die während der Berechnung während des Measure Elements berechnet werden, Arrange auf ganze Pixelwerte gerundet.
Diese Eigenschaft wird von untergeordneten Elementen geerbt.
Hinweis
Sie sollten für das Stammelement festlegen UseLayoutRounding true
. Das Layoutsystem fügt untergeordnete Koordinaten zu den übergeordneten Koordinaten hinzu; Wenn sich die übergeordneten Koordinaten also nicht auf einer Pixelgrenze befinden, befinden sich die untergeordneten Koordinaten auch nicht in einer Pixelgrenze. Wenn UseLayoutRounding der Stamm nicht festgelegt werden kann, legen Sie SnapsToDevicePixels für das untergeordnete Element fest, um den gewünschten Effekt zu erhalten.
Durch Zeichnen von Objekten an Pixelgrenzen werden die halbtransparenten Kanten, die durch Antialiasing erzeugt werden, entfernt, wenn ein Rand in die Mitte eines Gerätepixels fällt. Die folgende Abbildung zeigt die Ausgabe einer einzelnen Pixelbreitenlinie, die in die Mitte eines Gerätepixels fällt. Die Zeile auf der linken Seite verwendet keine Layoutrunde und ist antialiasiert. Die Linie auf der rechten Seite verwendet die Layoutrunde.
Wenn Sie layoutrunden und Star verkleinern, erstellt das Layoutsystem kleine Variationen in den Spalten- oder Zeilenmaßen, um das Rendern von Subpixeln zu vermeiden. Wenn z. B. ein Raster eine Gesamtbreite von 100 mit 3 Spalten pro Größe Staraufweist, anstatt drei Spalten zu erstellen, die eine gleiche Breite von 33,3 aufweisen, erstellt das Layoutsystem 2 Spalten mit einer Breite von 33 und einer mit einer Breite von 34.
Hinweis
In .NET 4.6 wurden Änderungen am Layoutrunden vorgenommen, um Instanzen des Clippings in Steuerelementen mit Rahmen zu reduzieren. Standardmäßig ist dieses Feature aktiviert, wenn Ihr Zielframework .NET Framework 4.6 oder höher ist. Anwendungen, die auf frühere Versionen des Frameworks abzielen, können sich für das neue Verhalten entscheiden, indem Sie die folgende Einstellung zu einer app.config Datei hinzufügen: <runtime><AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"/></runtime>
Die Einstellung wird nur wirksam, wenn die Anwendung auf dem .NET Framework 4.6 ausgeführt wird.