2 Stimmen

Expander auf Standard-Klappverhalten zurücksetzen

Ich verwende einen Expander innerhalb einer Neugestaltung (ein ContentControl mit einem Größenänderungsgreifer), und es expandiert/kollabiert ordnungsgemäß, wenn das Steuerelement anfänglich angezeigt wird. Sobald ich die Größe ändere, wird der Expander nicht richtig kollabieren, wie unten dokumentiert. Ich habe Snoop auf meine Anwendung ausgeführt, und ich sehe keine Höhen auf Expander oder seine Bestandteile festgelegt.

Wie kann ich Expander dazu bringen, wieder richtig zu kollabieren? Oder modifizieren Resizer nicht machen Expander traurig würde auch funktionieren.

Die Dokumentation des Expanders sagt:

"Damit ein Expander korrekt funktioniert, darf für das Expander-Steuerelement keine Höhe angegeben werden, wenn die Eigenschaft ExpandDirection auf Down oder Up gesetzt ist. Geben Sie auch keine Breite für das Expander-Steuerelement an, wenn die Eigenschaft ExpandDirection auf Left oder Right eingestellt ist. Wenn Sie eine Größe für das Expander-Steuerelement in der Richtung festlegen, in der der erweiterte Inhalt angezeigt wird, wird der durch den Größenparameter definierte Bereich mit einem Rahmen um ihn herum angezeigt. Dieser Bereich wird auch dann angezeigt, wenn das Fenster zusammengeklappt ist. Um die Größe des erweiterten Fensters festzulegen, legen Sie die Größenabmessungen für den Inhalt des Expander-Steuerelements oder den ScrollViewer fest, der den Inhalt umschließt."

1voto

Thomas Punkte 3290

Ich habe das Problem gelöst, indem ich den Resizer in den Expander verschoben habe, aber ich habe das Problem mit dem Expander auch schon an anderer Stelle gehabt, daher würde ich mich über eine Antwort freuen, wenn sie jemand hat.

danke

1voto

Thomas Punkte 3290

Ich hatte noch keine Gelegenheit, dieses spezielle Problem zu lösen, aber ich habe vor kurzem entdeckt, dass das Setzen von Height oder Width auf Double.NaN das Standardverhalten wiederherstellt.

Ironischerweise ergab sich dies aus dem Lesen des Codes des Resizer-Steuerelements, das ich in erster Linie verwendete.

1voto

Scott Marlowe Punkte 7675

Ich antworte ein bisschen spät (mehr als 2 Jahre), aber hey, besser spät als nie, oder?

Wie auch immer, ich lief in genau dieses Problem und war in der Lage, es mit einigen Code-Behind zu speichern und zurücksetzen Spaltenbreiten zu lösen.

Ich habe ein 3-spaltiges Grid, mit etwas Inhalt in der ersten Spalte, dem GridSplitter in der zweiten Spalte und dem Expander in der dritten Spalte. Es sieht so aus, dass nach dem Verschieben des GridSplitters die Breite der Spalte, die den Expander enthält, von Auto auf eine feste Größe umgestellt wird. Dadurch wird der Expander nicht mehr wie erwartet eingeklappt.

Also fügte ich eine private Variable und zwei Ereignishandler hinzu:

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

Wenn der Expander eingeklappt wird, speichere ich die feste Breite von Spalte2 (die irgendwo im Hintergrund automatisch von Auto geändert wurde) und setze die Breite dann auf Auto zurück.

Dann, wenn der Expander erweitert wird, stelle ich die Spalte wieder auf die feste Breite zurück, so dass sie auf die gleiche Breite erweitert wird, die sie hatte, bevor sie eingeklappt wurde.

Hier ist die XAML als Referenz:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X