2017-05-23 12 views
1

は、以下のコードを検討:グリッドに十分なスペースが与えられていないとクリップするのはなぜですか?

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition Height="100" /> 
    </Grid.RowDefinitions> 

    <Grid 
     Grid.Row="1" 
     Height="100"> 
     <Rectangle 
      Fill="Red" /> 

     <Rectangle 
      Fill="Yellow" 
      Width="50" 
      Height="50" 
      Margin="0,-100,0,0" /> 
    </Grid> 
</Grid> 

これはうまく動作し、黄色の矩形の半分(すなわち上部の行の任意のコンテンツを重ねる)赤上に示されています。今度は、RowDefinitionの高さを100ではなく99に変更して、内側のグリッドが要求しているスペースを取得しないようにすると、黄色のRectangleがクリップされます。なぜこれが存在し、回避策があるのか​​誰にも分かりますか?理想的には、内側のグリッドに定義された高さはないはずですが、それは私の手の外です。

+0

回避方法が見つかりました。行の高さをAutoに設定し、内側グリッドにマイナスの下マージンを設定します。まだクリッピングについての手掛かりはありません。 –

答えて

0

舞台裏で何が起こるかはわかりませんが、グリッドの空間が計算され、高さが利用可能なものより大きい場合は、クリップされています - すべての要素が行に適合するかどうかチェックされています。高さが利用可能なものより低いと、これは省略される可能性があります - したがって、マイナスのマージンが機能する可能性があります。少なくともそれは私がこれについて考えている方法です。より正確な情報が必要な場合は、at reference sourceを掘り下げてみてください。しかし

、あなたのグリッドは、行の高さをフォローしたい場合は - 私はVerticalAlignmentをを使用することをお勧め:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition Height="100" /> 
    </Grid.RowDefinitions> 

    <Grid Grid.Row="1" VerticalAlignment="Stretch"> 
     <Rectangle Fill="Red"/> 
     <Rectangle Fill="Yellow" Width="50" Height="50" Margin="0,-100,0,0" /> 
    </Grid> 
</Grid> 

個人的に私は要素の位置決めのための固定マージンを好きではない、より良いが、おそらくそこにありますあなたのニーズに応じていますが、あなたの要素を整理する方法。

関連する問題