如果您查看下面的代码。有没有办法编写某种循环而不是重复的Row和ColumnDefinitions?
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) },
}
};
答案 0 :(得分:1)
您可以使用循环预先创建行数组和列数组,并将这些属性分配给RowDefinitions
和ColumnDefinitions
属性。
我应该认为你需要在循环中调用RowDefinitions.Add()
和ColumnDefinitions.Add()
才能这样做。
答案 1 :(得分:0)
不,这是不可能的,因为这样做的唯一方法是,如果你可以为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;
答案 2 :(得分:0)
RowDefinitions是RowDefinitionCollection。 RowDefinitionCollection 是内部的,您无法在Grid外部创建。