d'un ItemsPanel Ceci est un suivi pour ItemsControl has no children during MainWindow's constructorLa modification de grille RowDefinitionCollection
Sur la base de la réponse à la question SO "WPF: organiser des objets de collection dans une grille", je donne les résultats suivants:
<ItemsControl Name="itemsControl1" ItemsSource="{Binding MyItems}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid Name="theGrid" ShowGridLines="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="{x:Type FrameworkElement}">
<Setter Property="Grid.Row" Value="{Binding RowIndex}" />
<Setter Property="Grid.Column" Value="{Binding ColumnIndex}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
Maintenant, Je veux définir le nombre de lignes et de colonnes de Grid dans le code derrière: theGrid.RowDefinitions.Clear(); theGrid.ColumnDefinitions.Clear();
for (uint i = 0; i < theNumberOfRows; i++)
theGrid.RowDefinitions.Add(new RowDefinition());
for (uint i = 0; i < theNumberOfCols; i++)
theGrid.ColumnDefinitions.Add(new ColumnDefinition());
Comme par MattHamilton « s réponse là, le ceindre est disponible une fois itemsControl1. ItemContainerGenerator.StatusChanged se déclenche avec l'état GeneratorStatus.ContainersGenerated. Toutefois, essayer de modifier la grille à partir du gestionnaire d'événements déclenche une exception «Impossible de modifier 'RowDefinitionCollection' en lecture seule». Alors, comment puis-je définir les collections de lignes et de colonnes de theGrid avant que la fenêtre ne s'affiche à l'utilisateur?
modifier: Je modifier les propriétés de la grille du gestionnaire d'événements itemsControl1.ItemContainerGenerator.StatusChanged:
if (itemsControl1.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
return;
itemsControl1.ItemContainerGenerator.StatusChanged -= ItemContainerGeneratorStatusChanged;
SetGridRowsAndColumns(InitialNumberOfRows, InitialMaxNumberOfCols);
Notez que SetGridRowsAndColumns (numberOfRows, numberOfCols) ne fonctionne plus tard, en réponse à un bouton clic .
Salut Avi, où modifiez vous exactement votre grille en ligne/Col de Defs? –
Salut Dmitry. Ajout d'une modification expliquant ceci. – Avi