c# - 有没有人可以通过一个语句将多个孩子添加到 Xamarin 网格?
问题描述
我为 Xamarin 找到了这个 Grid 扩展:
public static void AddChild(this Grid grid, View view, int row = 0, int column = 0, int rowspan = 1, int colspan = 1)
{
if (row < 0)
throw new ArgumentOutOfRangeException("row");
if (column < 0)
throw new ArgumentOutOfRangeException("column");
if (rowspan <= 0)
throw new ArgumentOutOfRangeException("rowspan");
if (colspan <= 0)
throw new ArgumentOutOfRangeException("colspan");
if (view == null)
throw new ArgumentNullException("view");
Grid.SetRow((BindableObject)view, row);
Grid.SetRowSpan((BindableObject)view, rowspan);
Grid.SetColumn((BindableObject)view, column);
Grid.SetColumnSpan((BindableObject)view, colspan);
grid.Children.Add(view);
}
我这样使用它:
this.AddChild(gridIconFrame, 0, 0);
this.AddChild(textLabel, 0, 1);
this.AddChild(valueLabel, 0, 2);
this.AddChild(arrowFrame, 0, 3);
我想做的是有另一个扩展,它具有使我能够编写代码的功能:
this.AddChildren((gridIconFrame, 0, 0),
(textLabel, 0, 1),
(valueLabel, 0, 2),
(arrowFrame, 0, 3));
谁能指出我正确的方向,并就如何通过另一个扩展来实现上面的代码给我一些建议?
解决方案
根据 Jason 建议使用params
关键字的评论,这与您想要的语法一样接近:
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var grid = new object();
AddChildren(grid,
D(new View(), 1, 1),
D(new View(), 1, 2));
static Item D(View view0, int row0, int column0)
{
return new Item(view0, row0, column0);
}
static void AddChildren(object grid, params Item[] items)
{
// loop to add items to grid.
foreach (Item item in items)
{
Console.WriteLine("add an item");
}
}
}
}
class Item
{
public View view { get; set; }
public int row { get; set; }
public int column { get; set; }
public Item(View view0, int row0, int column0)
{
view = view0;
row = row0;
column = column0;
}
}
class View
{
}
}
我没有找到任何方法来完全避免 C# 的严格语法;我的解决方法是:
- 创建一个保存参数的类Item;
- 创建一个名称很短的方法
D
,并调用该方法来构造每个项目。
您可以轻松地将“AddChildren”更改为 Gid 的扩展方法。但是您仍然需要D(..)
将每组参数转换为 AddChildren 的 Item。
(我做了grid
一个object
,所以我可以很容易地写这个例子。把它改成Grid
类。)
推荐阅读
- android - 带 hilt 的 API 接口依赖注入
- java - 在 HttpServletRequest 上下文之外测试 Spring Boot WebClient
- sql - 当有“总计”列时如何使用 Pivot?
- java - YAMLFactory 类型不可分配给 JsonFactory
- php - Laravel Eloquent 多对多,增量依赖
- css - 如何响应地旋转矩形的背景?
- forms - Vue中如何存储多个children的值并在父组件中执行一个函数
- android - 无法在 TabLayout 中将选定的选项卡居中
- flutter - 在颤动中换行
- c++ - do while循环和getline的问题-c ++