2009-10-21 13 views
9

Ho la seguente griglia WPf semplice, due colonne, un pulsante in ogni colonna, la prima colonna dimensionata automaticamente e uno splitter per consentire il ridimensionamento della colonna. Un gestore eventi è impostato sull'evento MouseDoubleclick dello splitter. Quando si fa clic sullo splitter, il pulsante nella colonna sinistra viene compresso.Griglia WPF - Colonna di dimensioni automatiche non collassare quando il contenuto Visibilità è impostato su Visibilità.Collapsed

Ora, poiché la colonna 1 viene ridimensionata automaticamente e il contenuto è compresso, a questo punto mi aspetto che la colonna 1 debba essere effettivamente nascosta, tuttavia non lo è. Sebbene il suo contenuto sia compresso, la dimensione della colonna non cambia (la colonna di remeber viene automaticamente ridimensionata).

Sembra strano per me, mi piacerebbe che la colonna crolli - qualsiasi idea di cosa sta succedendo qui?

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

risposta

8

Quello che sta succedendo è che quando si ridimensiona la larghezza/altezza della colonna/riga con il GridSplitter, imposta l'ActualHeight (o ActualWidth) della colonna/riga.

È necessario utilizzare un trigger per impostare l'altezza della riga su automatico (o zero) quando il controllo è compresso.

Aggiornami con questo.

-3

È perché lo splitter mantiene la sua posizione nella griglia, si tira la prima colonna, perché non provare un expander?

<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 preoccupazione non riguarda l'utilizzo di un expander, ma la soluzione del problema. – esylvestre

+0

@esylvestre huh? – Carlo

0

Nel mio caso, sono stato in grado di utilizzare StackPanel e impostare lo Visibility="Collapsed" che lo ha causato il ridimensionamento corretto.

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