2011-10-13 41 views
8

Tôi cần phải loại bỏ không gian bị chiếm bởi một Grid.Row. Tôi có thể sụp đổ (loại bỏ) điều khiển tôi đã đặt trong Grid.Row, nhưng vì RowDefinition có kích thước cố định (chiều cao) ngay cả sau khi gỡ bỏ điều khiển con tôi vẫn nhận được để xem một hàng trống.Làm cách nào để thu gọn RowDefinition?

Có cách nào để Thu gọn RowDefinition/Grid.Row không?

Cảm ơn sự quan tâm của bạn.

+0

có thể trùng lặp của [Ẩn hàng lưới trong WPF] (http://stackoverflow.com/questions/2502178/hide-grid-row-in-wpf) – Palec

Trả lời

1

Bạn có thể xem here ví dụ về thao tác Hàng và Cột trong lưới. Mặc dù tài liệu là dành cho .Net (WPF) nó vẫn còn có liên quan cho WP7/Silverlight.

Cá nhân tôi sẽ suy nghĩ kỹ trước khi sử dụng Lưới theo cách này. Có thể được, bất cứ điều gì bạn đang cố gắng có thể đạt được bằng cách sử dụng một stackpanel hoặc bất kỳ khác ra khỏi hộp điều khiển container.

+0

Chỉ để hoàn thành, tôi đã sử dụng grid.Rowdefinitions.RemoveAt (index). Tôi đồng ý rằng việc đặt một StackPanel có thể là một lựa chọn tốt hơn cho kịch bản này. –

7

Bạn có thể đã đặt RowDefinition.Height="Auto" và có thể đã gán chiều cao cố định cho hình ảnh thực tế trong hàng đó. Bằng cách này khi hình ảnh được nhìn thấy rõ ràng, hàng không chiếm chiều rộng cố định đã được gán cho hàng defintion.

+0

đây là câu trả lời đơn giản cho câu hỏi. Cảm ơn!. Tôi biết nó rất cũ, nhưng bạn đã thực hiện một lỗi đánh máy nhỏ, đã viết chiều rộng khi bạn có nghĩa là chiều cao. –

5

Đặt RowDefinition.Height ="Auto" không thích hợp cho mọi trường hợp, như thường lệ chúng tôi muốn * định kích thước các hàng của chúng tôi.

Thay vì tự động/lập trình thêm và xóa các hàng khỏi danh sách, sẽ dễ dàng và an toàn hơn để kéo dài nội dung hàng đầu tiên trong hàng tiếp theo.

Điều này có thể được thực hiện bằng cách sử dụng DataTrigger để đặt Grid.RowSpan trên mục đầu tiên trên lưới. Dưới đây là một ví dụ hoàn chỉnh - chỉ cần dán nó vào một cửa sổ WPF mới để xem nó hoạt động.

<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

Đặt Name cho lưới của bạn trước. Ban đầu, thiết lập chiều cao dòng qua XAML thuộc tính:

<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> 

Khi bạn muốn thu gọn RowDefinition:

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

Khi bạn muốn làm cho nó có thể nhìn thấy một lần nữa:

A.Visibility = Visibility.Visible; 
GridSize.RowDefinitions[0].Height = new GridLength(3, GridUnitType.Star); 
Các vấn đề liên quan