2014-07-21 100 views
1

我正在使用下面的代码创建一个带有网格的3列布局。在WPF中折叠网格

<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

我不理解的是,当我设置的第三网格的VisibilityCollapsed它需要的空间仍然存在。我想将剩余空间添加到其他两个网格中。

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

enter image description here

+0

可能重复[动态切换从C#代码WPF网格列的知名度](http://stackoverflow.com/questions/19227091/dyna mie-toggle-visibility-of-wpf-grid-column-from-c-sharp-code) – javi

回答

2

你告诉Grid平等本身分为3个部分,你需要的最后一列设置为Auto宽度达到你想要的东西(使最后一列以匹配其内容的宽度)的

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

非常感谢Bolu,这彻底解决了这个问题。 – Vahid

+1

+1这个力量在我心中:) – Sajeetharan

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

谢谢Sajeetharan,你的答案也可以,但Bolu建议的答案在不使用代码的情况下也是这样做的。 – Vahid