Почему существует исключение при создании сетки
Я должен создать массив сетки, размер которого определяется динамически.
Моя попытка сделать это:
int size = 4; //This "size" will be determined dynamically.suppose i got 4 here
Grid[] rowgrid = new Grid[size];
for (int i = 0; i < size; i++)
{
rowgrid[i].RowDefinitions.Add(new RowDefinition());
}
Это не дает никакой ошибки, но когда я запускаю, это дает исключение:The object reference is not set to an instance of an object.
РЕДАКТИРОВАТЬ: Я хочу использовать массив, потому что: после инициализации, прежде чем я должен сделать так:
rowgrid[0].Opacity=0.1;
rowgrid[1].Opacity=0.3;
rowgrid[2].Opacity=0.5;
Если вы предлагаете мне не работать программно, то я хочу сообщить, что я знаю это хорошо, но я обязан сделать это, потому что я работаю в уже разработанном проекте, и больше нет вариантов. Было бы очень полезно, если бы кто-нибудь заставил меня выйти из этой ошибки или любой другой альтернативы для достижения этой цели.
1 ответ
Если вы хотите сетку с разными строками или столбцами. Вы можете использовать UniformGrid, свойства столбцов и строк являются обязательными.
Так,
<UniformGrid Name="uniformGrid1" Rows="{Binding NumberOfRows}" Columns="{Binding NumberOfColumns}">
<Button Content="Button1" Grid.Row="0" Grid.Column="0" />
<Button Content="Button2" Grid.Row="0" Grid.Column="2" />
</UniformGrid>
В вашем коде
private int _numberOfRows;
public int NumberOfRows
{
get { return _numberOfRows; }
set { _numberOfRows= value; RaisePropertyChanged("NumberOfRows"); }
}
private int _numberOfColumns;
public int NumberOfColumns
{
get { return _numberOfColumns; }
set { _numberOfColumns= value; RaisePropertyChanged("NumberOfColumns"); }
}
public MainViewModel()
{
NumberOfColumns = 3;
NumberOfRows = 2;
}