WPF中如何折叠网格

3
我正在使用以下代码创建具有网格的3列布局。
<Window x:Class="WpfApplication21.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid Column="0" Background="Aqua"></Grid>
        <Grid Column="1" Background="Red"></Grid>
        <Grid Column="2"  Background="Yellow"></Grid>
    </Grid>
</Window>

enter image description here

我不理解的是,当我将第三个网格的Visibility设置为Collapsed时,它所占用的空间仍然存在。我希望剩余的空间添加到其他两个网格中。

<Grid Column="2" Background="Yellow" Visibility="Collapsed"></Grid>

enter image description here


可能是WPF网格列的动态切换可见性的重复问题。 - javi
2个回答

5

您正在告诉Grid将自身平均分为3部分,您需要将最后一列设置为Auto宽度,以实现您想要的效果(使最后一列与其内容的宽度匹配):

<Grid.ColumnDefinitions>
      <ColumnDefinition Width="*"></ColumnDefinition>
      <ColumnDefinition Width="*"></ColumnDefinition>
      <ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>

1

由于您只隐藏了网格的ColumnDefinition,而没有实际隐藏网格。

您可以像这样做,要隐藏第三列,需要将该列的宽度设置为“0”

   <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
            <ColumnDefinition  x:Name="TestColumn"  Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid Column="0" Background="Aqua"></Grid>
        <Grid Column="1" Background="Red"></Grid>
       <Button Grid.Column="2" Click="hideColumn">hideColumn</Button>
    </Grid>

 private void hideColumn(object sender, RoutedEventArgs e)
        {
            this.TestColumn.Width = new GridLength(0, GridUnitType.Pixel);
        }

谢谢Sajeetharan,你的答案也有效,但是Bolu建议的答案在不使用代码的情况下也能实现相同的效果。 - Vahid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接