Вероятно, запутанный заголовок вопроса.
Сетка с красным прямоугольником — пример того, как это должно выглядеть.
Сетка с синим прямоугольником (не показанная на изображении) имеет поле, которое заставляет вторую сетку быть меньше, чем я явно установил ее. Что, по-видимому, заставляет WPF переворачиваться и скрывать все, что находится за пределами его установленных границ.
Я попытался установить клип, чтобы он был больше, чем сетка.
Единственный способ избежать этого — написать пользовательскую панель, которая измеряет свои дочерние элементы с ограничением PositiveInfinity, но затем упорядочивает дочерние элементы с правильной шириной. У этого метода много проблем. Нехорошо лгать своим детям.
В любом случае, вот код:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="NegativeMarginTooMuchClipping.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640"
Height="400">
<Grid>
<StackPanel Width="600" Height="300">
<Grid Margin="40,50,60,50" Background="#FFB8B8B8" Width="500" Height="50">
<Rectangle Fill="Red" HorizontalAlignment="Left" Height="50" VerticalAlignment="Top" Width="50" Margin="0,-50,0,0"/>
</Grid>
<Grid Margin="40,50,61,50" Background="#FFB8B8B8" Width="500" Height="50">
<Rectangle Fill="Blue" HorizontalAlignment="Left" Height="50" VerticalAlignment="Top" Width="50" Margin="0,-50,0,0"/>
</Grid>
</StackPanel>
</Grid>
Known issue? Am I doing it wrong? Need more clarification?