web-dev-qa-db-fra.com

Comment ajouter le contrôle WPF à une rangée de grille particulière et de la cellule pendant l'exécution?

J'ai la grille suivante dans ma WPF " Fenêtre " (oui la fenêtre de classe);

<Grid Name="RequiredGrid">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="70" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
        </Grid>

Selon ce qui est passé dans la fenêtre, je veux ajouter des éléments dans cette grille une ligne à la fois. A savoir, je veux ajouter une étiquette dans la colonne de gauche et une zone de texte dans la colonne de droite. Je crois que je sais comment ajouter de nouvelles lignes pour la tenue de nouvelles données en procédant comme suit dans le code sous-jacent:

RequiredGrid.RowDefinitions.Add(new RowDefinition());

Le problème est, après que je l'ai créé mon label et mon TextBox.

Label AttrLabel = new Label();
TextBox AttrTextBox = new TextBox();

Je ne sais pas vraiment comment obtenir dans la fenêtre il s'affiche. J'ai vu des discussions qui disent, faire quelque chose comme ceci:

this.Controls.Add(AttrLabel);
this.Controls.Add(AttrTextBox);

Il y a deux problèmes avec ceci. 1) Ma classe de fenêtre ne possède pas cette propriété " Controls " ou autre. 2) Cela ne me aider à préciser la ligne et la colonne de chaque élément de l'interface utilisateur.

Maintenant en XAML, Id facile de spécifier la ligne et la colonne avec quelque chose comme ceci:

 <Label Grid.Column="0" Grid.Row="0"/>

Cette défaite de la " dynamique-ness " de mon intention ici cependant. Est-ce que quelqu'un sait comment je peux obtenir mes éléments d'interface utilisateur créé pour afficher dynamiquement dans ma fenêtre et spécifier la ligne et la colonne, il affichera dans la grille.

21
Ultratrunks

Les propriétés de grille.row et de grille.column sont propriétés connectées , et telles qu'elles ne sont pas définies comme des propriétés normales .NET. La bonne façon de les définir du code est la suivante:

Grid.SetRow(someLabel, 0);
Grid.SetColumn(someLabel, 0);

Vous devriez être capable de le faire avant ou après l'ajoutant à la collection d'enfants de l'objet de la grille, mais les définir avant d'ajouter le contrôle devrait empêcher tout scintillement possible.

31
Chris Shain
  • Créez la grille (<yourGrid>) et les définitions de ligne comme vous l'avez fait.
  • Créez le contrôle (<yourcontrol>). Puis réglez la colonne et la ligne pour la grille:

    Grid.SetColumnSpan(<yourControl>, 3); Grid.SetRow(<yourControl>, 0);

  • Ajoutez ensuite votre contrôle à la grille que vous avez créée

    <yourGrid>.Children.Add(<yourControl>);

19
Alex Curtis