2009-10-21 8 views
9

Tengo la siguiente grilla simpl WPf, dos columnas, un botón en cada columna, la primera columna de tamaño automático y un divisor para permitir el cambio de tamaño de la columna. Un controlador de eventos está configurado en el evento Splitter MouseDoubleclick. Cuando se hace clic en el divisor, el botón de la columna izquierda se contrae.WPF Grid - Columna de tamaño automático no colapsa cuando la visibilidad del contenido está configurada en Visibility.Collapsed

Ahora, como la columna 1 tiene un tamaño automático y el contenido está contraído, esperaría en este punto que la columna 1 se oculte efectivamente, pero no es así. Aunque su contenido está colapsado, el tamaño de la columna no cambia (la columna recuerda es autosize).

Me parece extraño, me gustaría que la columna colapse, ¿hay alguna idea de lo que está pasando aquí?

<Window x:Class="KingLayout.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
     <Button x:Name="leftButton">Left</Button> 
     <Button Grid.Column="1" Margin="5,0,0,0">Right</Button> 
     <GridSplitter Name="verticalSplitter" ShowsPreview="True" Grid.RowSpan="1" Grid.Column="1" HorizontalAlignment="Left" 
         VerticalAlignment="Stretch" Width="5" MouseDoubleClick="verticalSplitter_MouseDoubleClick"/> 
    </Grid> 
</Window> 


    private void verticalSplitter_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     leftButton.Visibility = leftButton.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible; 
    } 

Respuesta

8

Lo que sucede es que cuando cambia el tamaño de la columna/fila de la anchura/altura con el GridSplitter, establece el ActualHeight (o ActualWidth) de la columna/fila.

Debe usar un disparador para establecer la altura de la fila en automático (o cero) cuando se colapse su control.

Recibir una actualización con esto.

-3

Es porque el divisor mantiene su posición en la parrilla, se tira de la primera columna, ¿por qué no intentar un expansor?

<Grid ShowGridLines="True"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 
    <Expander ExpandDirection="Left"> 
     <Button x:Name="leftButton">Left</Button> 
    </Expander> 
    <Button Grid.Column="1" Margin="5,0,0,0">Right</Button> 
</Grid> 
+1

La preocupación no es sobre el uso de un expansor, se trata de solucionar el problema. – esylvestre

+0

@esylvestre ¿eh? – Carlo

0

En mi caso, pude usar StackPanels y configurar el Visibility="Collapsed" que causó que cambiara el tamaño correctamente.

<StackPanel Orientation="Vertical" Margin="5"> 
    <StackPanel Orientation="Horizontal"> 
     <!-- Some controls --> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal" Visibility="{Binding YourVisibilityProperty}"> 
     <!-- Some controls --> 
    </StackPanel> 
</StackPanel> 
Cuestiones relacionadas