2016-11-11 9 views
0

グリッド内にグリッドと2つの境界要素があります。窓を小さくすると、外枠が消えます。なぜ誰にどのように私はそれが消えないように防ぐのですか?私は窓小さくする場合ウィンドウのサイズを変更すると、余白の枠が消えます

enter image description here

外側(青)の境界が表示されていない:私はそれをサイズ変更するときに何が起こるか

ここ
<Window x:Class="TestBorder.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:TestBorder" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="170" Width="225"> 
    <Grid Margin="5" Height="100" VerticalAlignment="Top"> 
     <Border BorderBrush="LightBlue" BorderThickness="5" Margin="-5"/> 
     <Border BorderBrush="Orange" BorderThickness="5"/> 
    </Grid> 
</Window> 

である:ここ メインウィンドウのレイアウトであります。私はそれを回避することが可能であることを知っていますが、なぜこれが起こっているのか知りたいのですが。

+0

あなたがWPFに対応したレイアウトのいくつかの種類を構築したい...という場合は?だから、このQ&Aをチェックしてください:http://stackoverflow.com/questions/24909458/how-to-make-a-wpf-window-responsive – Hackerman

答えて

1

これは、グリッド要素がコンテンツをフルサイズで表示できないときにクリップするためです。 ClipToBoundsが設定されていない限り、UIElement基本クラスはクリッピングを行いませんが、中間FrameworkElementクラスはこの動作をオーバーライドし、領域に収まらない場合はクリップします。クリッピングマスクのジオメトリは、GetLayoutClip()メソッドによって決定されます。切り取られた領域から余白が減算され、結果として外側の境界線が消えます。 FrameworkElement.GetLayoutClip()上のMSDNから

は、クリッピングマスクのジオメトリを返します。レイアウトが システムで より大きい要素を配置しようとすると、マスクが適用されます。

備考:レイアウトのシステム動作の一部として、marginSizeからmarginSimitsが減算されます。

返されたnull参照は、クリッピングが発生しないことを示します。 デフォルト実装では、ClipToBoundsがfalseの場合は常にnullが返されます。 このメソッドは、UIElement.GetLayoutClipをオーバーライドします。 FrameworkElement 実装では、MaxHeightとMaxWidthが計算に使用されます。 FrameworkElementのいくつかのサブクラスがこのメソッドを再度オーバーライドします。

(このanswerから取られた)すべてのいずれかのクリッピングを行うことはありませんグリッドを使用することが可能である:

public class MyGrid : Grid 
{ 
    protected override Geometry GetLayoutClip(Size layoutSlotSize) 
    { 
     return null; 
    } 
} 
0

グリッド上に高さを設定していて、常に同じサイズになります(メインウィンドウのサイズを変更しても問題ありません)。枠線をすべてのウィンドウに合わせてサイズを変更したい場合は、グリッド上の高さを削除します。

関連する問題