我在一个对话框中有一组控件,我想自动调整大小。一切正常,直到我尝试使用均匀间隔的网格宽度重新排列事物。
这是XAML:
<Grid Margin="20" >
<Grid.RowDefinitions>
<RowDefinition Height="AUTO" />
<RowDefinition Height="AUTO" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid>
...left controls
</Grid>
<Border BorderThickness="1" BorderBrush="Gray" Grid.Column="1" Margin="0,10,0,5">
...right controls
</Border>
<Grid Grid.Row="2" Grid.ColumnSpan="2>
...okay and cancel
</Grid>
</Grid>
结果如下:
不是我所期待的。右栏有一个很小的宽度,由于某种原因它没有听到“*”并使它等于另一列的一半。
如果我将Width="450"
放在最高的网格或UserControl上(或者在运行时,调整其所在窗口的大小!)一切都“跳”并且我得到了我期望的,两列均匀间隔:
但是现在它没有响应重新调整大小,或者更大内容的自动调整大小(除了在父容器拉伸时不会拉伸)如果我在等间距之后我可以使用共享大小组。我有什么问题或是Width="*"
的预期行为吗?
答案 0 :(得分:1)
当您的外部网格托管在未定义宽度的容器中时,实际宽度将是后代的结果。也就是说,(外部)网格测量传递将“询问”到右边的列(边框):“我给你你想要的任何空间:你需要多少?”。只要Border片段不需要任何特定大小,结果就是默认值(在大多数情况下为零)。因此崩溃的行为。
基本上,您应该定义外部网格宽度,或者第二列宽度(通过列中的任何内容来表示它需要多少空间)。
答案 1 :(得分:0)
你是对的*
意味着把大小与网格成比例。它会发生,因为您的最高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>