【问题标题】:Collapse a Grid in WPF在 WPF 中折叠网格
【发布时间】:2014-09-11 18:50:29
【问题描述】:

我正在使用下面的代码创建一个带有网格的 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>

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

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

【问题讨论】:

标签: c# wpf grid


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    你可以这样做,要隐藏第三列,你需要将列的宽度设置为“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 建议的答案在不使用代码的情况下也是如此。
    猜你喜欢
    • 2019-05-29
    • 2011-06-09
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2019-11-28
    相关资源
    最近更新 更多