Modificação de uma grade de itensPanel RowDefinitionCollection
Este é um acompanhamento paraItemsControl não tem filhos durante o construtor do MainWindow
Com base na resposta à pergunta SO "WPF: organizando itens de coleção em uma grade", tenho o seguinte:
<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>
Agora, eu quero definir o número de linhas e colunas do theGrid no código por trás: 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());
Conforme MattHamilton resposta de @ lá, o gird está disponível assim que itemsControl1. O ItemContainerGenerator.StatusChanged é acionado com o status GeneratorStatus.ContainersGenerated.
No entanto, tentar modificar a grade do manipulador de eventos gera uma exceção "Não é possível modificar 'RowDefinitionCollection' no estado somente leitura".
ntão, como posso definir as coleções de linhas e colunas doGrid antes que a janela seja mostrada ao usuári
edita: Estou modificando as propriedades da Grade a partir do manipulador de eventos itemsControl1.ItemContainerGenerator.StatusChanged:
if (itemsControl1.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
return;
itemsControl1.ItemContainerGenerator.StatusChanged -= ItemContainerGeneratorStatusChanged;
SetGridRowsAndColumns(InitialNumberOfRows, InitialMaxNumberOfCols);
Observe que SetGridRowsAndColumns (numberOfRows, numberOfCols) funciona mais tarde, em resposta a um clique no botã