2011-10-13 69 views
8

我需要刪除Grid.Row佔用的空間。我可以摺疊(刪除)我放置在Grid.Row中的控件,但是由於RowDefinition具有固定的大小(高度),即使在刪除子控件後仍然會看到空行。如何摺疊RowDefinition?

有沒有辦法來摺疊RowDefinition/Grid.Row?

感謝您的關注。

+0

的可能的複製[隱藏WPF中的網格行](http://stackoverflow.com/questions/2502178/hide-grid-row-in-wpf) – Palec

回答

1

你可以看到here一個操縱網格中的行和列的例子。儘管文檔是針對.Net(WPF),但它仍然適用於WP7/Silverlight。

我個人會在這種方式使用網格之前三思。可能是,無論您嘗試使用堆棧面板還是任何其他開箱容器控件都可以實現。

+0

爲了完成,我使用了grid.Rowdefinitions.RemoveAt(index)。我同意放置一個StackPanel可能是這種情況下更好的選擇。 –

7

您可以設置RowDefinition.Height="Auto",並且可以將該固定高度分配給該行中的實際視覺。這樣,當視覺可見時,該行不會佔用固定的寬度,該寬度被分配給行定義。

+0

這是對問題的簡單回答。謝謝!。我知道它很古老,但是當你意味着身高時,你寫了一個小小的錯字,寫下了寬度。 –

5

設置RowDefinition.Height ="Auto"不適合所有情況,因爲我們經常需要*我們的行的大小。

而不是動態/編程地添加和刪除列表中的行,將第一行內容拉伸到下一行更容易和更安全。

這可以通過使用DataTrigger在網格上的第一項上設置Grid.RowSpan來完成。下面是一個完整的例子 - 只需將其粘貼到新的WPF窗口中即可看到它的實際操作。

<Grid> 
     <Grid.Resources> 

      <BooleanToVisibilityConverter x:Key="visConverter"></BooleanToVisibilityConverter> 
     </Grid.Resources> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"></RowDefinition> 
      <RowDefinition Height="Auto"></RowDefinition> 
      <RowDefinition Height="*"></RowDefinition> 
     </Grid.RowDefinitions> 

     <Grid Grid.Row="0" Background="Orange"> 
      <Grid.Style> 
       <Style TargetType="Grid"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding ElementName=toggle1, Path=IsChecked}" Value="False"> 
          <Setter Property="Grid.RowSpan" Value="3"></Setter> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Grid.Style> 
     </Grid> 
     <GridSplitter Grid.Row="1" ResizeBehavior="PreviousAndNext" HorizontalAlignment="Stretch" Height="3" 
         Visibility="{Binding ElementName=toggle1, Path=IsChecked, Converter={StaticResource visConverter}}"></GridSplitter> 
     <Grid Name="bottomGrid" Grid.Row="2" Background="LightBlue" 
       Visibility="{Binding ElementName=toggle1, Path=IsChecked, Converter={StaticResource visConverter}}"> 
     </Grid> 
     <ToggleButton Name="toggle1" VerticalAlignment="Top">Hide/Show</ToggleButton> 
</Grid> 
1

爲您的網格首先設置Name。最初,設置通過XAML屬性行高:

<Grid Name="GridSize"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="3*"></RowDefinition> 
     <RowDefinition Height="1*"></RowDefinition> 
     <RowDefinition Height="2*"></RowDefinition> 
    </Grid.RowDefinitions> 
    <Grid Name="A" Grid.Row="0""></Grid> 
    <Grid Name="B" Grid.Row="1""></Grid> 
    <Grid Name="C" Grid.Row="2""></Grid> 
</Grid> 

當你想摺疊RowDefinition

A.Visibility = Visibility.Collapsed; 
GridSize.RowDefinitions[0].Height = new GridLength(0); 

當你想再次可見:

A.Visibility = Visibility.Visible; 
GridSize.RowDefinitions[0].Height = new GridLength(3, GridUnitType.Star);