FrameworkElement.UseLayoutRounding Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera lub ustawia wartość wskazującą, czy zaokrąglanie układu ma być stosowane do rozmiaru i położenia tego elementu podczas układu.
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
Wartość właściwości
true
jeśli zastosowano zaokrąglenie układu; w przeciwnym razie , false
. Wartość domyślna to false
.
Przykłady
W poniższym przykładzie pokazano wpływ UseLayoutRounding właściwości na linię o pojedynczej szerokości pikseli. Linia po lewej stronie nie używa zaokrąglania układu, a linia po prawej stronie używa zaokrąglania układu. Jeśli powoli zmieniasz rozmiar okna, możesz zobaczyć różnicę, jaką sprawia zaokrąglanie układu.
<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>
Uwagi
UseLayoutRounding Gdy właściwość elementu to true
, wszystkie wartości pikseli innych niż całkowita, które są obliczane podczas Measure i Arrange przechodzi, są zaokrąglane do całych wartości pikseli.
Ta właściwość jest dziedziczona przez elementy podrzędne.
Uwaga
Dla elementu głównego należy ustawić true
wartość UseLayoutRounding . System układu dodaje współrzędne podrzędne do współrzędnych nadrzędnych; w związku z tym, jeśli współrzędne nadrzędne nie znajdują się na granicy pikseli, współrzędne podrzędne nie znajdują się również na granicy pikseli. Jeśli UseLayoutRounding nie można ustawić elementu głównego, ustaw SnapsToDevicePixels dla elementu podrzędnego, aby uzyskać odpowiedni efekt.
Obiekty rysunkowe na granicach pikseli eliminują półprzezroczyste krawędzie, które są tworzone przez aliasowanie, gdy krawędź spadnie w środku piksela urządzenia. Na poniższej ilustracji przedstawiono dane wyjściowe linii o pojedynczej szerokości pikseli, która mieści się w środku piksela urządzenia. Linia po lewej stronie nie używa zaokrąglania układu i jest anty aliasowana. Linia po prawej stronie używa zaokrąglania układu.
W przypadku używania zaokrąglania i Star określania rozmiaru układu system układów tworzy niewielkie różnice w pomiarach kolumn lub wierszy, aby uniknąć renderowania podpikselowego. Jeśli na przykład siatka ma całkowitą szerokość 100 z 3 kolumnami o rozmiarze Star, zamiast tworzyć trzy kolumny o równej szerokości 33,3, system układu tworzy 2 kolumny o szerokości 33 i jednej, która ma szerokość 34.
Uwaga
W programie .NET 4.6 wprowadzono zmiany w zaokrągleniu układu w celu zmniejszenia liczby wystąpień wycinków w kontrolkach z obramowaniami. Domyślnie ta funkcja jest włączona, jeśli struktura docelowa jest .NET Framework 4.6 lub nowsza. Aplikacje przeznaczone dla starszych wersji platformy mogą wyrazić zgodę na nowe zachowanie, dodając następujące ustawienie do pliku app.config: <runtime><AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"/></runtime>
Ustawienie ma zastosowanie tylko wtedy, gdy aplikacja jest uruchomiona na .NET Framework 4.6.