Griglia WPF - La colonna con dimensioni automatiche non collassa quando Visibilità del contenuto è impostata su Visibilità

StackOverflow https://stackoverflow.com/questions/1601171

  •  05-07-2019
  •  | 
  •  

Domanda

Ho la seguente griglia WPf semplice, due colonne, un pulsante in ogni colonna, la prima colonna auto dimensionata e uno splitter per consentire il ridimensionamento della colonna. Un gestore di eventi è impostato sull'evento MouseDoubleclick dello splitter. Quando si fa doppio clic sul divisore, il pulsante nella colonna di sinistra viene compresso.

Ora, poiché la colonna 1 viene ridimensionata automaticamente e il contenuto viene compresso, mi aspetto a questo punto 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 della memoria viene ridimensionata automaticamente).

Mi sembra strano, vorrei che la colonna crollasse - hai idea di cosa stia 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;
    }
È stato utile?

Soluzione

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

Dovresti usare un trigger per impostare l'altezza della riga su auto (o zero) quando il controllo è compresso.

Fammi aggiornare con questo.

Altri suggerimenti

Nel mio caso, sono stato in grado di utilizzare StackPanels e impostare il Visibilità = " Collapsed " che ha causato il corretto ridimensionamento.

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

È perché lo splitter mantiene la sua posizione nella griglia, estrae la prima colonna, perché non provi un espansore?

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top