7
votes

WPF: Réduire le grewsplitter?

J'ai une page WPF, avec une grille dessus.

Il y a trois rangées. La rangée 0 contient une grille avec hauteur = "*" . La rangée 1 contient un plat de grille avec hauteur = "auto" . La ligne 2 contient un formulaire de détails avec hauteur = "2 *" .

Voici la chose - j'ai un bouton qui est censé basculer la visibilité du formulaire de détails. Et cela fonctionne juste bien. Sauf que cela cache simplement le formulaire de la rangée 2, il n'élargit pas la grille dans la rangée 0 pour remplir l'espace. Ce que je veux, c'est pour le bouton de basculer GridView dans la rangée 0 pour prendre tout l'espace, puis pour basculer à l'endroit où les choses étaient.

Jouant clairement avec la visibilité du formulaire à l'intérieur de la ligne ne pourra pas accomplir ce que je veux.

Mais que dois-je jouer avec?


0 commentaires

4 Réponses :


4
votes

J'ai dû introduire une propriété de dépendance jointe pour gérer cela dans ma propre application:

private static int GetPrevious(GridSplitter gridSplitter, int index)
{
    switch (gridSplitter.ResizeBehavior)
    {
        case GridResizeBehavior.PreviousAndNext:
        case GridResizeBehavior.PreviousAndCurrent:
            return index - 1;
        case GridResizeBehavior.CurrentAndNext:
            return index;
        case GridResizeBehavior.BasedOnAlignment:
        default:
            throw new NotSupportedException();
    }
}

private static int GetNext(GridSplitter gridSplitter, int index)
{
    switch (gridSplitter.ResizeBehavior)
    {
        case GridResizeBehavior.PreviousAndCurrent:
            return index;
        case GridResizeBehavior.PreviousAndNext:
        case GridResizeBehavior.CurrentAndNext:
            return index + 1;
        case GridResizeBehavior.BasedOnAlignment:
        default:
            throw new NotSupportedException();
    }
}


0 commentaires

3
votes

Ce contrôle gridexpander qui hérite de former des grewspliter qui pourrait au travail que vous recherchez. Le crédit va à Shemesh pour écrire la version originale Silverlight que j'ai adaptée à ma propre usage dans WPF. Je me trouve à vouloir cette fonctionnalité presque partout où j'essaie d'utiliser des grewsplitter afin que cela puisse être assez pratique.


0 commentaires

7
votes

Supposons que j'ai cette mise en page xaml: xxx

puis je peux masquer le second contrôle (réduisez le séparateur vers le bas) avec ce code (équivalent du paramètre hauteur = "0" in xaml): xxx

et non couler avec ce code (équivalent du paramètre hauteur = "1 *" dans xaml, qui est la valeur par défaut pour une rowdefinition): xxx

C'est ce que le séparateur suctère lorsque l'utilisateur le déplace.


1 commentaires

Grande solution! J'ai même configuré la liaison pour la dernière propriété Hauteur RowDefinition, au lieu de devoir le faire en code. J'hésitant à mettre en œuvre la solution acceptée comme cela impliquait beaucoup de code. C'était beaucoup plus simple et travaillé tout de suite. Merci!



14
votes

Si quiconque veut une solution purement XAML, j'ai pu évoquer un moyen de masquer le séparateur et la ligne pertinente à l'aide de styles, de setters et de déclencheurs.

J'ai utilisé une ressource statique pour mon style, qui a été réglé sur Modifier la hauteur et maxheight lorsqu'un booléen lié spécifique a été défini. xxx

J'ai simplement appliqué le style sur le Définitions de ligne, et cela a fonctionné comme un charme: xxx

notable est que je l'ai essayé sans la propriété MaxHeight, et cela ne s'effondrait pas correctement. L'ajouter semble avoir fait le tour pour moi.


1 commentaires

Je n'ai pas réalisé que je pourrais avoir des styles pour les définitions de ligne / colonne. Agréable! Merci.