在构造函数中的属性中循环
本文关键字:循环 属性 构造函数 | 更新日期: 2023-09-27 18:33:17
如果你看看下面的代码。有没有办法编写某种循环而不是重复的行和列定义?
var grid = new Grid
{
RowSpacing = 12,
ColumnSpacing = 12,
VerticalOptions = LayoutOptions.FillAndExpand,
RowDefinitions =
{
new RowDefinition { Height = new GridLength(1, GridUnitType.Star) },
new RowDefinition { Height = new GridLength(1, GridUnitType.Star) },
new RowDefinition { Height = new GridLength(1, GridUnitType.Star) },
},
ColumnDefinitions =
{
new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) },
new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) },
}
};
您可以使用循环事先创建行数组和列数组,并将其分配给RowDefinitions
和ColumnDefinitions
属性。
不过,我应该认为您需要呼叫RowDefinitions.Add()
并循环ColumnDefinitions.Add()
才能这样做。
不,这是不可能的,因为这的唯一方法是您可以为 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;
RowDefinition
是 RowDefinitionCollection。RowDefinitionCollection 是内部的,不能在 Grid 外部创建。