在WPF中折叠网格

时间:2014-07-21 09:49:58

标签: c# wpf grid

我使用以下代码创建带有网格的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

2 个答案:

答案 0 :(得分:3)

你告诉Grid将自己平分为3个部分,你需要将最后一列设置为Auto宽度以达到你想要的效果(使最后一列与其宽度相匹配)含量):

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

答案 1 :(得分:1)

由于您只隐藏了Grid的ColumnDefinition,但实际上并没有隐藏Grid。

您可以执行以下操作:要隐藏第三列,您需要将列的宽度设置为&#34; 0&#34;

   <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);
        }