TL; DR:Grid
に1ピクセルの空の行があることによってEllipse
がクリッピングされています。
問題は複数のレベルにあります。あなたの外側のGrid
は、Width
とHeight
のセットです。次にRowDefinition
にはHeight
が設定され、Ellipse
のサイズは両方の高さよりも大きくなります。これらのサイズを設定することにより
<Grid Width="128" Height="120">
<Grid.RowDefinitions>
<RowDefinition Height="120" />
<RowDefinition Height="1" x:Name="ChangeHeightRow" />
</Grid.RowDefinitions>
<Grid>
<Canvas Background="Red">
<Ellipse Width="140" Height="140" Fill="Green" />
</Canvas>
</Grid>
</Grid>
は、あなたが他のコントロールを使用すると、行とGrid
サイズなど何もない(=自動)のためのサイジングとしてAuto
を使用する場合、彼らは希望よりも内部統制への接近を可能にしています。
最初のコードでは、Ellipse
と1ピクセル高い空の行を持つGrid
の行があります。既定では、XAMLコントロールにはZ軸があり、XAMLファイルの下部に宣言された項目はビジュアルレイヤーの最上位のコントロールになります。あなたのグリッドでは、2行目が重なった場合の最初の行の上にあります。 Ellipse
が行の外に漏れているので、2番目の行がその上に描画され、Ellipse
がクリップされます。
高さを0に設定すると、2行目が描画されなくなり、コントロールをクリップできなくなります。
これをより明確にするために、私はあなたのグリッド外の別のStackPanel
を追加し、Button
を追加し、少しあなたのXAMLを微調整しています。ご覧のように、ButtonはEllipse
の上に描画されます(下のXAMLで定義されているように、Z軸上でより高い視覚レイヤを取得します)。
<StackPanel Width="130">
<Grid Width="128" Height="120">
<Grid.RowDefinitions>
<RowDefinition Height="120" />
<RowDefinition Height="0" x:Name="ChangeHeightRow" />
</Grid.RowDefinitions>
<Grid>
<Canvas Background="Red">
<Ellipse Width="140" Height="140" Fill="Green" />
</Canvas>
</Grid>
</Grid>
<Button Background="Black" Foreground="White">Test</Button>
</StackPanel>
我々はグリッドへのStackPanelを変更した場合、我々は同じ動作をします。しかし、ボタンをXAML宣言で一番上に移動します(グリッドを保持します)。1の上に行があるので、楕円の下にあります)、Zレイヤーの順序が異なるため、楕円の後ろにあることがわかります。
<Grid Width="130">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Button Background="Black" Foreground="White" Grid.Row="1">Test</Button>
<Grid Width="128" Height="120" Grid.Row="0">
<Grid.RowDefinitions>
<RowDefinition Height="120" />
<RowDefinition Height="0" x:Name="ChangeHeightRow" />
</Grid.RowDefinitions>
<Grid>
<Canvas Background="Red">
<Ellipse Width="140" Height="140" Fill="Green" />
</Canvas>
</Grid>
</Grid>
</Grid>
あなたのグリッド幅が128、高さが120であるが、あなたの楕円の幅が140、高さが140 – AVK
@AVKNaiduですので、なぜそれが第二の場合にはカットオフ取得を停止するのですか? – Trevor
まだ同じです。あなたのサークルはグリッドよりも大きいです。 2番目の行がない場合、基本的にグリッド上に円を積み重ねています。それが理由です。 – AVK