Question

J'utilise un expandeur dans un Resizer . (un ContentControl avec une pince de redimensionnement) et s’agrandit / s’effondre correctement lorsque le contrôle apparaît initialement. Une fois que je le redimensionnerai, l’Expander ne s’effondrera pas correctement, comme indiqué ci-dessous. J'ai exécuté Snoop sur mon application et je ne vois aucune hauteur fixée à Expander ou à ses composants.

Comment pourrais-je convaincre Expander de s’effondrer correctement? Ou modifier Resizer pour ne pas rendre Expander triste fonctionnerait également.

La documentation d'Expander indique:

  

" Pour qu'un expandeur fonctionne correctement, ne spécifiez pas de hauteur sur le contrôle Expander lorsque la propriété ExpandDirection est définie sur Down ou Up. De même, ne spécifiez pas de largeur sur le contrôle Expander lorsque la propriété ExpandDirection est définie sur Left ou Right. Lorsque vous définissez une taille sur le contrôle Expander dans la direction d'affichage du contenu développé, la zone définie par le paramètre size est affichée avec une bordure. Cette zone s'affiche même lorsque la fenêtre est réduite. Pour définir la taille de la fenêtre développée, définissez les dimensions de la taille sur le contenu du contrôle Expander ou du ScrollViewer qui entoure le contenu. "

Était-ce utile?

La solution 2

Je n'ai pas eu l'occasion de simuler ce problème depuis lors, mais j'ai récemment découvert que le réglage de hauteur ou de largeur sur Double.NaN le réinitialise à son comportement libre par défaut.

Ironiquement, c’est en lisant le code du contrôle Resizer que j’utilisais au départ.

Autres conseils

J'ai résolu le problème en déplaçant le Resizer dans Expander, mais je suis déjà tombé sur le problème Expander ailleurs, je voudrais donc toujours une réponse si quelqu'un le possède.

merci

Répondre à cette question un peu tard (plus de 2 ans), mais bon, mieux vaut tard que jamais, non?

Quoi qu’il en soit, j’ai rencontré ce problème et je suis parvenu à le résoudre avec un code-behind pour enregistrer et redéfinir la largeur des colonnes.

J'ai une grille à 3 colonnes, avec du contenu dans la première colonne, le GridSplitter dans la deuxième colonne et le Expander dans la troisième colonne. Il semble que ce qui se passe est qu'après le déplacement du GridSplitter, la largeur de la colonne contenant Expander est modifiée de Auto à une taille fixe. Cela provoque l’extension de l’Expander comme prévu.

J'ai donc ajouté une variable privée et deux gestionnaires d'événements:

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

Lorsque le module d’expansion est réduit, j’enregistre la largeur fixe de Column2 (qui a été modifiée automatiquement à partir de la fonction Auto auto-magiquement en arrière-plan), puis je réinitialise la largeur sur Auto.

Ensuite, lorsque le module d’extension est développé, je restaure la colonne à sa largeur fixe afin qu’elle se développe à la même largeur qu’avant la réduction.

Voici le code XAML pour référence:

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

J'ai rencontré un problème similaire en utilisant un Expander dans une grille avec un GridSplitter. Le comportement de développement / réduction fonctionne correctement jusqu'à ce que je déplace le séparateur ... Ensuite, Expander ne s'effondrera pas, il n'en cachera que le contenu.

Je cherche toujours une solution de contournement ... en avez-vous fini par en trouver une?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top