Это Followup для ItemsControl has no children during MainWindow's constructorИзменение ItemsPanel в Грид RowDefinitionCollection
на основе ответа на SO вопрос «WPF: организация коллекции предметов в сетке», я следующее:
<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>
Теперь, Я хочу установить количество строк и столбцов Grid в коде позади: 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());
Согласно MattHamilton «s ответ там, то ГИРД предоставляется один раз itemsControl1. ItemContainerGenerator.StatusChanged пожары со статусом GeneratorStatus.ContainersGenerated.
Однако попытка изменить сетку из обработчика события вызывает исключение «Невозможно изменить« RowDefinitionCollection »в состоянии« только для чтения ».
Итак, как я могу установить коллекцию строк и столбцов Grid перед тем, как окно будет показано пользователю?
редактировать: Я изменение свойств сетке от itemsControl1.ItemContainerGenerator.StatusChanged обработчика событий:
if (itemsControl1.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
return;
itemsControl1.ItemContainerGenerator.StatusChanged -= ItemContainerGeneratorStatusChanged;
SetGridRowsAndColumns(InitialNumberOfRows, InitialMaxNumberOfCols);
Обратите внимание, что SetGridRowsAndColumns (numberOfRows, numberOfCols) делает работу позже, в ответ на нажатие кнопки ,
Привет Avi, где именно вы модифицируя свои сетки Row/Col Defs от? –
Привет, Дмитрий. Добавлено редактирование, объясняющее это. – Avi