web-dev-qa-db-fra.com

SharedSizeGroup et * dimensionnement de la grille

J'ai un contrôle utilisateur, appelez-le UserControl, qui a une grille avec les définitions de colonne suivantes:

<Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" SharedSizeGroup="A"/>
            <ColumnDefinition Width="Auto" SharedSizeGroup="B"/>
            <ColumnDefinition Width="*" SharedSizeGroup="C"/>
            <ColumnDefinition Width="Auto" SharedSizeGroup="D"/>
            <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="E"/>
            <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="F"/>
            <ColumnDefinition Width="110" SharedSizeGroup="G"/>
            <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="H"/>
            <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="I"/>
            <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="J"/>
            <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="K"/>
            <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="L"/>
</Grid.ColumnDefinitions>

J'ai également MainWindow, qui contient une grille elle-même, avec la propriété suivante définie sur la grille:

Grid.IsSharedSizeScope="True"

Maintenant, j'ai ajouté quelques UserControls à la grille dans MainWindow (chacun sur une ligne distincte). Mon objectif est d'avoir chacune des largeurs de colonne des différents UserControls pour rester synchronisé. Tout fonctionne correctement lors de l'utilisation de SharedSizeGroup, sauf une chose. Il semble que toute colonne avec une largeur de * ne se comporte pas comme elle le devrait. Il semble que les largeurs de colonne * soient définies comme si elles étaient plutôt automatiques.

Existe-t-il des limitations/problèmes avec SharedSizeGroup et * le dimensionnement? Cela semble être le meilleur moyen de synchroniser les largeurs de colonne, mais je n'arrive pas à résoudre ce problème.

Merci.

38
Flack

MSDN :

Les colonnes et les lignes qui participent au partage de taille ne respectent pas le dimensionnement en étoile. Dans le scénario de partage de taille, le dimensionnement en étoile est traité comme Auto

Si vous utilisez étoile, toutes les colonnes auront la même largeur, vous devez donc attribuer le même SharedSizeGroup à tous si cela ne vous dérange pas l'aspect de dimensionnement automatique:

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" SharedSizeGroup="A"/>
    <ColumnDefinition Width="Auto" SharedSizeGroup="B"/>
    <ColumnDefinition Width="*" SharedSizeGroup="StarDontWork"/>
    <ColumnDefinition Width="Auto" SharedSizeGroup="D"/>
    <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="StarDontWork"/>
    <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="StarDontWork"/>
    <ColumnDefinition Width="110" SharedSizeGroup="G"/>
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="H"/>
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="I"/>
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="J"/>
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="K"/>
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="L"/>
</Grid.ColumnDefinitions>

(De ce comportement, il s'ensuit également que vous pouvez supprimer la propriété Width lorsque SharedSizeGroup est définie)


Vous pouvez en déduire que si toutes les colonnes de dimensionnement automatique sont dans des groupes de tailles partagées, alors toutes les colonnes de dimensionnement en étoile auront les mêmes tailles que chaque grille dans la portée aura la même quantité d'espace inutilisé qui sera distribué aux colonnes de taille en étoile .

Un exemple simple:

<Grid.ColumnDefinitions>
    <ColumnDefinition SharedSizeGroup="A"/>
    <ColumnDefinition SharedSizeGroup="B" Width="*"/>
    <ColumnDefinition SharedSizeGroup="C"/>
</Grid.ColumnDefinitions>

Comme expliqué le Width="*" ne fera rien, mais en tant que colonnes 0 et 2 sont synchronisés, colonne 1 doit également être synchronisé pour que vous puissiez simplement supprimer le SharedSizeGroup:

<Grid.ColumnDefinitions>
    <ColumnDefinition SharedSizeGroup="A"/>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition SharedSizeGroup="C"/>
</Grid.ColumnDefinitions>
52
H.B.