Нет, это не представляется возможным, потому что единственный способ это будет работать, если вы могли бы присвоить совершенно новое значение RowDefinitions
собственности, которую вы не можете:
public RowDefinitionCollection RowDefinitions { get; }
^^^^
Синтаксис, как показанный в вашем вопросе, - это просто удобный способ вызвать .Add
на объект в этом свойстве, поэтому вам не нужно встраивать его в этот синтаксис. Ваш код только "короткие" для этого:
var temp = new Grid();
temp.RowSpacing = 12;
temp.ColumnSpacing = 12;
temp.VerticalOptions = LayoutOptions.FillAndExpand;
temp.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
temp.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
temp.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
... same for columns
В частности, ваш код не делает это:
temp.RowDefinitions = ...
^
Вы, вероятно, хотите, такой код:
var grid = new Grid()
{
RowSpacing = 12,
ColumnSpacing = 12,
VerticalOptions = LayoutOptions.FillAndExpand,
RowDefinitions = Enumerable.Range(0, 100).Select(_ =>
new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }),
ColumnDefinitions = Enumerable.Range(.....
Но вы не можете этого сделать, поскольку это потребует, чтобы RowDefinitions
и ColumnDefinitions
были доступны для записи.
Самое близкое, как это:
var temp = new Grid
{
RowSpacing = 12,
ColumnSpacing = 12,
VerticalOptions = LayoutOptions.FillAndExpand,
};
for (int index = 0; index < rowCount; index++)
temp.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
... same for columns
var grid = temp;
Каков тип 'RowDefinitions'? –
Используйте циклы для создания массива строк и массива столбцов заблаговременно и назначьте их для 'RowDefinitions' и' ColumnDefinitions'? –
@CodeCaster 'Enumerable.Repeat()' будет возвращать ссылки на один и тот же объект, что может быть не очень полезно в этом случае (но не зная деталей 'Grid', это трудно сказать) –