我试过你的例子,结果就像你说的:第2栏不见了,边距也不见了。
每当网格无法完全显示时,这种情况似乎就会发生。
例如,如果将第三列定义设置为200,则一旦第2列没有完整显示,边距就会消失。当你从底部调整窗口大小时,也会发生同样的事情。
如果将现有网格放入另一个容器(网格、StackPanel等)中,并将MinWidth设置为至少等于列宽度+边距的大小(在您的示例中为310),则不会发生这种情况。
像这样:
<StackPanel MinWidth="310">
<Grid Margin="100,0,0,0" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="10" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="40" />
</Grid.RowDefinitions>
<Border Background="DarkRed" Opacity="0.3" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Margin="-80,0,0,0" Panel.ZIndex="1" />
<TextBlock Text="column 0" Background="LightBlue" Grid.Row="0" Grid.Column="0" />
<TextBlock Text="column 2" Background="LightGreen" Grid.Row="0" Grid.Column="2" />
</Grid>
</StackPanel>