Comment ajouter dynamiquement des RowDefinition ou ColumnDefinition à une Grille avec de liaison?
Je suis en train de créer un tableau avec un nombre variable de lignes et de colonnes. Je fais cela avec un ItemsControl
qui a un Grid
comme son ItemsPanel
. Et je sais que je peux le mettre Grid.Row
et Grid.Column
de chaque élément par le biais de son ItemContainerStyle
. Mais je ne sais pas comment le changer le nombre de lignes et de colonnes et de leurs tailles quand je ne peux pas accéder à la Grille par son nom.
Question:
Comment pouvez-vous modifier RowDefinitions
ou ColumnDefinitions
d'un Grid
au moment de l'exécution à l'aide de seulement XAML et liaison avec pas de code-behind?
C'est le code XAML:
<ItemsControl Name="myItemsControl" ItemsSource="{Binding Cells}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid Name="myGrid">
<Grid.RowDefinitions>
<!-- unknown number of rows are added here in run-time -->
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<!-- known number of columns are added here in run-time -->
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style.../>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
J'ai essayé d'ajouter un peu de RowDefinition
dans le code derrière, mais je ne pouvais pas trouver un moyen d'accéder à myGrid
par son nom (ou de toute autre manière), puisqu'il est à l'intérieur d'un ItemsPanelTemplate
.
Je me demandais si est-il un moyen de faire ajouter ou modifier RowDefinitions
au moment de l'exécution?
OriginalL'auteur Bizhan | 2012-01-25
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser propriétés attachées pour un
Grid
que modifier laRowDefinitions
etColumnDefinitions
lorsque ces propriétés sont définies ou modifiées.Il va vous permettre d'écrire votre
Grid
comme ceci:Puis juste exposer une propriété à partir de votre
ViewModel
qui retourne le plus grand numéro de ligne dans leCells
collection.Vous pouvez trouver une mise en œuvre détaillée de ces propriétés sur mon blog.
Merci 🙂 La première fois que j'ai copié le code de wordpress, il s'est débarrassé de tous les caractères spéciaux et j'ai remplacé les guillemets simples avec des guillemets doubles par erreur. L'extra
.ToString()
était là parce que la star de colonnes ou de lignes utilisé pour être un entier avant j'avais besoin d'étoiles multiples colonnes d'un jour et a décidé de le mettre à jour vers une chaîne de caractèresComment locales définies dans le code xaml?
Habituellement quelque chose comme
xmlns:local="clr-namespace:MyProjectNamespace"
dans le<Window>
tag. Il raconte WPF à utiliser le terme "local" comme un raccourci pointe vers l'espace de Noms XMLMyProjectNamespace
Merci pour la mise à jour @Rachel ..j'ai utilisé UniformGrid au lieu de la Grille et de lier les lignes. [lien]stackoverflow.com/questions/43627127/...
OriginalL'auteur Rachel
Si vous aviez accès à la grille à partir du code-behind, vous pourriez faire ceci:
myGrid
par son nom de code.je peux... cela a bien fonctionné pour moi
Vous ne pouvez pas accéder à tout ce que c'est quand c'est le ItemPanelTemplate d'un ItemsControl. @WtFudgE vous avez probablement fait quelque chose d'autre que cela.
OriginalL'auteur Y.Yanavichus