FrameworkElement.UseLayoutRounding FrameworkElement.UseLayoutRounding FrameworkElement.UseLayoutRounding FrameworkElement.UseLayoutRounding Property


レイアウトの間に、この要素のサイズおよび位置にレイアウトの丸めを適用するかどうかを示す値を取得または設定します。Gets or sets a value that indicates whether layout rounding should be applied to this element's size and position during layout.

 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


レイアウトの丸めを適用する場合は true、それ以外の場合は falsetrue if layout rounding is applied; otherwise, false. 既定値は、false です。The default is false.

次の例を説明する、UseLayoutRoundingプロパティは、1 つのピクセル幅の行にします。The following example demonstrates the effect that the UseLayoutRounding property has on a single pixel-width line. 左側の線では、レイアウトの丸め処理は使用しませんし、右側の線は、レイアウトの丸め処理を使用します。The line on the left does not use layout rounding and the line on the right uses layout rounding. 緩やかに変化ウィンドウをサイズ変更する場合は、違いは、レイアウトの丸めによるを確認できます。If you slowly resize the window, you can see the difference that layout rounding makes.

<Page x:Class="LayoutRounding.Lines"  
    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"/>  
  <!-- Background Grid -->  
    <DrawingBrush  Viewport="0,0,10,10" ViewportUnits="Absolute" TileMode="Tile">  
          <GeometryDrawing Brush="White">  
              <RectangleGeometry Rect="0,0,1,1" />  
          <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" />  


ときに、UseLayoutRounding要素のプロパティはtrue、中に計算されるすべての整数以外のピクセル値、MeasureArrangeパスは全体のピクセル値に丸められます。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.

このプロパティは、子要素によって継承されます。This property is inherited by child elements.


設定する必要がありますUseLayoutRoundingtrueルート要素。You should set UseLayoutRounding to true on the root element. レイアウト システムは、親の座標に子の座標を追加します。そのため、親の座標がピクセル境界にない場合は、子の座標上にないもピクセルの境界。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. 場合UseLayoutRoundingルートにある設定を設定できませんSnapsToDevicePixelsを希望する効果を取得する子。If UseLayoutRounding cannot be set at the root, set SnapsToDevicePixels on the child to obtain the effect that you want.

デバイス ピクセルの途中でエッジになった場合に、アンチ エイリアスによって生成される半透明のエッジを排除するピクセルの境界にオブジェクトを描画します。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. 次の図は、デバイスのピクセルの途中である 1 つのピクセル幅の行の出力を示します。The following illustration shows the output of a single pixel-width line that falls in the middle of a device pixel. 左側の線は、レイアウトの丸め処理を使用しませんし、アンチ エイリアス処理します。The line on the left does not use layout rounding and is anti-aliased. 右側の線は、レイアウトの丸め処理を使用します。The line on the right uses layout rounding.

アンチ-エイリアス化された行が 1 つのピクセルの行と比較します。Anti-aliased line compared to single pixel line.

レイアウトの丸め処理を使用する場合とStarサイズ変更、レイアウト システムに作成します小さな差異サブピクセル レンダリングを回避するために、列または行の測定値。When you use layout rounding and Star sizing, the layout system creates small variations in the column or row measurements to avoid subpixel rendering. たとえば、グリッドがある 3 列のサイズの 100 の合計幅Star33.3 の等しい幅がある 3 つの列を作成する代わりに、レイアウト システムは、幅が 33 と 34 の幅のある 1 つの 2 つの列を作成します。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.


.NET 4.6 で変更にはレイアウトの境界線でコントロールのクリッピングの発生を削減する丸め処理が行われました。In .NET 4.6 changes were made to layout rounding to reduce instances of clipping in controls with borders. 既定では、この機能は、ターゲット フレームワークが .NET Framework 4.6 以降である場合に有効にします。By default, this feature is enabled if your Target Framework is .NET Framework 4.6 or higher. 以前のバージョンの framework を対象とするアプリケーションは、app.config ファイルに次の設定を追加して、新しい動作にオプトインできます。<runtime><AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"/></runtime> 設定は、アプリケーションが .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.