当您的外部网格托管在未定义宽度的容器中时,实际宽度将是后代的结果。也就是说,(外部)网格测量通道将“询问”右列(边框):“我正在给您任何您想要的空间:您需要多少?”。只要边框片段不需要任何特定大小,结果就是默认值(在大多数情况下为零)。因此出现了崩溃的行为。
基本上,您应该定义外部网格宽度或第二列宽度(意味着列内的任何内容都应该告诉它需要多少空间)。
你是对的
*
意思是取与网格成正比的大小。发生这种情况是因为您最高的Grid
没有足够的空间变宽(当您设置Width="450"
时,Grid
会变宽)。
如果你的
Window
内只有一个网格,那么theSecondColumn
将占据右侧的所有位置(它会根据你的需要更宽):
<Window x:Class="DataGridAddedColumns.MainWindow"
<!-- The code is omitted for the brevity -->
Title="MainWindow" Height="550" Width="525"
WindowStartupLocation="CenterScreen">
<Grid Name="grid">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Name="theSecondColumn" Width="*"/>
</Grid.ColumnDefinitions>
<Grid>
</Window>
我发现Border有一个问题,当它的大小应该与具有
*
列/行的网格单元相匹配时。
有问题的例子:
<Grid>
...
<Border Grid.Row="1" Grid.Column="1"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
...
</Border>
</Grid>
解决方案:将边框放在辅助网格内,因为对于网格内的网格,单元格对齐效果很好。然后将 Border 的宽度和高度绑定到 Grid 的
ActualHeight
/ ActualWidth
。
<Grid>
...
<Grid x:Name="borderGrid" Grid.Row="1" Grid.Column="1">
<Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Height="{Binding ActualHeight, ElementName=borderGrid}"
Width="{Binding ActualWidth, ElementName=borderGrid}">
...
</Border>
</Grid>
</Grid>
因此,即使更改根网格的大小,边框也会正确适合其目标单元格。 (在使用 ColumnSpan 和 RowSpan 时也适用。)