9
votes

Comment puis-je rendre mes colonnes de grille toujours la même largeur?

Si je définis la largeur de la colonne sur * code>, ils ont la même largeur initialement, mais si un élément est supérieur à la quantité autorisée, il s'étirera la largeur de la colonne.

Comment puis-je Forcer ma grille pour garder les colonnes de la même taille avec définir explicitement une taille? p>

Je ne peux pas utiliser un uniformeGrid, car cette grille est utilisée dans un articleControl, et les articles doivent être placés dans des spécifiques Grid.row Code> / Grid.Column Code> Spots P>

Modifier strong> Voici un échantillon de mon code actuel. P>

<ColumnDefinition Width="{Binding 
    ElementName=RootControl, 
    Path=ActualWidth, 
    Converter={StaticResource MathConverter}, 
    ConverterParameter=(@VALUE-150)/7}" />


0 commentaires

5 Réponses :


15
votes

Vous pouvez:

1) Code hardcode une taille dans DIP: P>

<ColumnDefinition SharedSizeGroup="A" />
<ColumnDefinition SharedSizeGroup="A" />
...


3 commentaires

Je ne veux pas de coder de manière difficile la largeur car la grille est destinée à occuper tous les espaces disponibles, et le groupe SharedSizeize rend tous les articles de la même largeur que le plus grand article.


Pourriez-vous publier du code? Le comportement est impair. Les colonnes de la taille des étoiles ne doivent être redimensionnées que lorsque le conteneur est redimensionné, le contenu ne joue pas de rôle.


Pour l'option 2, vous devez définir pour la grille environnante



5
votes

Vous pouvez essayer de lier la largeur de vos colonnes à une propriété qui divise la largeur totale de la fenêtre par le nombre de colonnes


1 commentaires

Je travaille avec qui j'essaye de tenter maintenant, mais mon problème que je rencontre est la grille ne prend pas l'espace complet, donc je dois aussi calculer des marges, d'autres largeurs de contrôle, etc. avant de pouvoir calculer la taille pour diviser par 7 . Mon panneau de base est un dockpanel, les en-têtes étant dessinés dynamiquement au besoin, puis les articles de la contenance avec le contenu prenant tout espace restant.



0
votes

Je n'ai pas essayé, mais je pense que cela devrait fonctionner:

xaml: xxx

c #: xxx


4 commentaires

Le problème est que si un élément est plus large que ce que * permet, il prolonge la colonne au-delà de cette taille. Le code que vous avez posté ne fera que faire toutes les colonnes égales à la plus grande largeur de la colonne et je ne le souhaite pas.


Avez-vous réellement essayé de définir toutes les colonnesDéfinations avec le même gestionnaire - colonneDefinition_Loaded ?? Le code doit définir toutes les largeurs maximales sur ce qu'ils sont (autorisés par *). Après cela, tout élément mis à l'intérieur ne doit pas modifier la taille.


Oui, j'ai fait toutes les colonnes aussi larges que le plus grand article, qui faisait partie de la grille non montrée car je n'ai pas de barre de défilement horizontale. En outre, l'en-tête n'est plus aligné et il ne redimensionne pas automatiquement si l'utilisateur redimensionne l'application.


Eh bien, j'ai essayé en ajoutant des objets manuellement, c'est pourquoi je suppose que cela ne m'a pas montré de cette façon. Désolé, mais je suppose que la seule solution est calculée manuellement comme suggéré par Msmucker0527.



2
votes

Le moyen le plus propre est d'utiliser un uniformalgrid comme ceci: xxx

très agréable lorsqu'il est utilisé comme ÉlémentsPanel . .


1 commentaires

Comme je l'ai dit dans ma question, je ne peux pas utiliser un uniformeGrid, car les éléments doivent être placés dans des spécifiques grid.row / grid.column des taches et ne peuplent pas chaque carré dans la grille.



0
votes

Essayez l'ISSHAREDSIZESCOPE TRAVAILLE DE LA GRID:

<StackPanel Margin="15" Grid.IsSharedSizeScope="True">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" SharedSizeGroup="A"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto" SharedSizeGroup="B"/>
        </Grid.ColumnDefinitions>

        <TextBlock Grid.Column="0" Text="Col 1"/>
        <TextBox Grid.Column="1" />
        <TextBlock Grid.Column="2" Text="3rd column here"/>
    </Grid>

    <Separator Margin="0,20"/>

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

        <TextBlock Grid.Column="0" Text="1"/>
        <TextBox Grid.Column="1"/>
    </Grid>
</StackPanel>


0 commentaires