Pregunta

Estoy usando un expansor dentro de un Resizer (un ContentControl con una pinza de cambio de tamaño), y se expande / colapsa correctamente cuando aparece el control inicialmente. Una vez que cambie el tamaño, el expansor no colapsará correctamente, como se documenta a continuación. Ejecuté Snoop en mi aplicación, y no veo ninguna altura establecida en Expander o sus componentes.

¿Cómo podría convencer a Expander para que vuelva a colapsar correctamente? O modificar Resizer para no hacer que Expander esté triste también funcionaría.

La documentación del expansor dice:

  

" Para que un expansor funcione correctamente, no especifique una Altura en el control del expansor cuando la propiedad ExpandDirection está establecida en Abajo o Arriba. Del mismo modo, no especifique un Ancho en el control Expansor cuando la propiedad ExpandDirection esté establecida en Izquierda o Derecha. Cuando establece un tamaño en el control Expansor en la dirección en que se muestra el contenido expandido, el área definida por el parámetro de tamaño se muestra con un borde a su alrededor. Esta área se muestra incluso cuando la ventana está contraída. Para establecer el tamaño de la ventana expandida, establezca dimensiones de tamaño en el contenido del control Expander o el ScrollViewer que encierra el contenido. & Quot;

¿Fue útil?

Solución 2

No he tenido la oportunidad de burlarme de este problema en particular desde entonces, pero recientemente descubrí que establecer Altura o Ancho en Doble. NaN lo restablece a su comportamiento predeterminado de espíritu libre.

Irónicamente, esto fue de leer el código del control Resizer que estaba usando en primer lugar.

Otros consejos

Resolví el problema moviendo el Resizer dentro del expansor, pero me he encontrado con el problema del expansor en otro lugar, por lo que aún me gustaría una respuesta si alguien lo tiene.

gracias

Contestando esto un poco tarde (más de 2 años), pero, oye, mejor tarde que nunca, ¿verdad?

De todos modos, me encontré con este problema exacto y pude resolverlo con algo de código subyacente para guardar y restablecer los anchos de columna.

Tengo una cuadrícula de 3 columnas, con algo de contenido en la primera columna, el GridSplitter en la segunda columna y el expansor en la tercera columna. Parece que lo que está sucediendo es que después de mover el GridSplitter, el ancho de la columna que contiene el expansor se modifica de Auto a un tamaño fijo. Esto hace que el expansor ya no se colapse como se esperaba.

Entonces, agregué una variable privada y dos controladores de eventos:

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

Cuando el expansor se contrae, guardo el ancho fijo de la Columna2 (que se modificó de Auto automáticamente en el fondo en algún lugar) y luego restablezco el ancho a Auto.

Luego, cuando se expande el expansor, restablezco la columna al ancho fijo para que se expanda al mismo ancho que tenía antes de colapsarse.

Aquí está el XAML para referencia:

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

Me encontré con un problema similar usando un expansor dentro de una cuadrícula con un GridSplitter. El comportamiento de expansión / contracción funciona bien hasta que muevo el divisor ... Luego, el expansor no colapsará, solo oculta su contenido.

Todavía estoy buscando una solución ... ¿finalmente encontraste una?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top