通过将Width
设置为Auto
,可以使三列具有相同的宽度。
<Grid x:Name="myGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0">One</Label>
<Label Grid.Row="0" Grid.Column="1" x:Name="label1">Two</Label>
<Label Grid.Row="0" Grid.Column="2">Three</Label>
</Grid>
我想实现的是,如果中间列被折叠或隐藏,其他两个占用剩余空间,并获得相同的宽度。
如果因为Width="*"而将Visibility设置为Collapsed或Hidden,则其他两列的宽度保持不变。
<Label Grid.Row="0" Grid.Column="1" Visibility="Collapsed">Two</Label>
我通过编程将第二列宽度设置为自动,实现了所需的功能,但我正在寻找一些其他的解决方案(最好是xaml方式一)。
private void Button_Click(object sender, RoutedEventArgs e)
{
this.myGrid.ColumnDefinitions[1].Width = GridLength.Auto;
this.label1.Visibility = Visibility.Collapsed;
}
3条答案
按热度按时间xeufq47z1#
使用
UniformGrid
可以实现所需的行为。确保将行数设置为1。
其余元素的间距相等。
iqxoj9l92#
我按照Rob的建议添加了Xaml绑定,如下所示:
xaml背后的代码:
qc6wkl3g3#
我迟到了,但我想提出我的解决方案,以防它对任何人有用。
我用这个转换器
如下所示: