2011-10-13 11 views
8

Necesito eliminar el espacio ocupado por un Grid.Row. Puedo colapsar (eliminar) el control que he colocado en Grid.Row, pero dado que RowDefinition tiene un tamaño fijo (alto) incluso después de eliminar el control secundario, aún puedo ver una fila en blanco.Cómo colapsar una definición de hilera?

¿Hay alguna manera de contraer una RowDefinition/Grid.Row?

Gracias por su interés.

+0

duplicado posible de [Ocultar fila de cuadrícula en WPF] (http://stackoverflow.com/questions/2502178/hide-grid-row-in-wpf) – Palec

Respuesta

1

Puede ver here un ejemplo de manipulación de filas y columnas en una cuadrícula. Aunque la documentación es para .Net (WPF), sigue siendo relevante para WP7/Silverlight.

Yo personalmente lo pensaría dos veces antes de usar una Grilla de esta manera. Puede ser que, lo que sea que intente se puede lograr utilizando un panel de distribución o cualquier otro contenedor de caja de controles.

+0

Solo para completar, utilicé grid.Rowdefinitions.RemoveAt (index). Estoy de acuerdo en que colocar un StackPanel podría ser una mejor opción para este escenario. –

7

Podría haber establecido RowDefinition.Height="Auto" y podría haber asignado una altura fija a la visual real en esa fila. De esta manera, cuando el visual se colisiona visiblemente, la fila no ocupa el ancho fijo que se asignó a la definición de fila.

+0

esta es la respuesta simple a la pregunta. ¡Gracias!. Sé que es muy viejo, pero cometiste un pequeño error tipográfico, escribiste ancho cuando querías decir altura. –

5

El ajuste RowDefinition.Height ="Auto" no es adecuado para todos los casos, ya que a menudo queremos * el tamaño de nuestras filas.

En lugar de agregar y eliminar dinámicamente/programáticamente filas de la lista, es más fácil y más seguro estirar el contenido de las primeras filas en las siguientes filas.

Esto se puede hacer utilizando un DataTrigger para establecer Grid.RowSpan en el primer elemento de la cuadrícula. A continuación se muestra un ejemplo completo: simplemente péguelo en una nueva ventana de WPF para verlo en acción.

<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

Conjunto Name para su cuadrícula primero. Inicialmente, establecer las alturas de las filas a través de atributos 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> 

Cuando se quiere contraer un RowDefinition:

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

Cuando se desea hacerlo visible:

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