Domanda

Sto usando un espansore all'interno di un Resizer (un ContentControl con una pinza di ridimensionamento) e si espande / collassa correttamente all'avvio iniziale del controllo. Dopo averlo ridimensionato, l'espansore non collasserà correttamente, come documentato di seguito. Ho eseguito Snoop sulla mia applicazione e non vedo alcuna altezza impostata su Expander o sui suoi componenti.

Come farei per convincere Expander a collassare di nuovo correttamente? O modificare Resizer per non rendere Expander triste funzionerebbe altrettanto bene.

La documentazione di Expander dice:

  

" Perché un Expander funzioni correttamente, non specificare un'altezza sul controllo Expander quando la proprietà ExpandDirection è impostata su Giù o Su. Allo stesso modo, non specificare una larghezza sul controllo Expander quando la proprietà ExpandDirection è impostata su Sinistra o Destra. Quando si imposta una dimensione sul controllo Expander nella direzione in cui viene visualizzato il contenuto espanso, l'area definita dal parametro size viene visualizzata con un bordo attorno. Quest'area viene visualizzata anche quando la finestra è chiusa. Per impostare le dimensioni della finestra espansa, imposta le dimensioni sul contenuto del controllo Expander o ScrollViewer che racchiude il contenuto. & Quot;

È stato utile?

Soluzione 2

Da allora non ho avuto la possibilità di deridere questo particolare problema, ma di recente ho scoperto che l'impostazione Altezza o Larghezza su Doppio. NoN ripristina il suo comportamento di spirito libero predefinito.

Ironia della sorte, questo è stato dalla lettura del codice del controllo Resizer che stavo usando in primo luogo.

Altri suggerimenti

Ho risolto il problema spostando Resizer all'interno dell'Expander, ma ho riscontrato il problema di Expander altrove, quindi vorrei comunque una risposta se qualcuno ce l'ha.

grazie

Rispondere un po 'tardi (2+ anni), ma, ehi, meglio tardi che mai, giusto?

Comunque, ho riscontrato questo esatto problema e sono stato in grado di risolverlo con un po 'di codice per salvare e ripristinare le larghezze di colonna.

Ho una griglia a 3 colonne, con alcuni contenuti nella prima colonna, GridSplitter nella seconda colonna e Expander nella terza colonna. Sembra che ciò che sta accadendo sia che dopo che GridSplitter è stato spostato, la larghezza della colonna contenente Expander viene modificata da Auto a una dimensione fissa. Questo fa sì che Expander non collassi più come previsto.

Quindi, ho aggiunto una variabile privata e due gestori di eventi:

    private GridLength _columnWidth;

    private void Expander_Expanded (object sender, RoutedEventArgs e)
    {
        // restore column fixed size saved in Collapse event
        Column2.Width = _columnWidth;
    }

    private void Expander_Collapsed (object sender, RoutedEventArgs e)
    {
        // save current column width so we can restore when expander is expanded
        _columnWidth = Column2.Width;

        // reset column width to auto so the expander will collapse properly
        Column2.Width = GridLength.Auto;
    }

Quando l'espansore è crollato, salvo la larghezza fissa di Column2 (che è stata modificata da Auto in modo automatico sullo sfondo da qualche parte), quindi reimpostare la larghezza su Auto.

Quindi, quando l'espansore viene espanso, ripristino la colonna alla larghezza fissa in modo che si espanda alla stessa larghezza che era prima del crollo.

Ecco la XAML come riferimento:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition x:Name="Column2" Width="Auto" />
    </Grid.ColumnDefinitions>
    <ScrollViewer Grid.Column="0" VerticalScrollBarVisibility="Auto">
        <!-- some content goes here -->
    </ScrollViewer>
    <GridSplitter HorizontalAlignment="Right" VerticalAlignment="Stretch"
         Grid.Column="1" ResizeBehavior="PreviousAndNext" Width="5"
         Background="Black" />
    <Expander Grid.Column="2" ExpandDirection="Left"
         IsExpanded="True" Style="{StaticResource LeftExpander}"
         Expanded="Expander_Expanded" Collapsed="Expander_Collapsed">
        <Grid>
            <TextBox TextWrapping="Wrap" Height="Auto" Margin="0 5 5 5" />
        </Grid>
    </Expander>
</Grid>

Ho riscontrato un problema simile usando un Expander all'interno di una griglia con un GridSplitter. Il comportamento di espansione / compressione funziona bene fino a quando non sposto lo splitter ... Successivamente, l'espansore non collassa, nasconde solo il suo contenuto.

Sto ancora cercando una soluzione alternativa ... alla fine l'hai trovata?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top