如何访问 Xamarin.Forms 中以编程方式创建的 UI 元素:timepicker

Posted

技术标签:

【中文标题】如何访问 Xamarin.Forms 中以编程方式创建的 UI 元素:timepicker【英文标题】:How can I access programmatically created UI Elements in Xamarin.Forms : timepicker 【发布时间】:2020-06-11 14:26:46 【问题描述】:

我有一个以编程方式创建 UI 元素的方法。示例:

Label label1 = new Label(); 
label1.Text = "Testlabel";

TimePicker timepicker1 = new TimePicker();
timepicker1.Time = new TimeSpan(07, 00, 00);

之后,我将它们都添加到已经存在的 StackLayout 中。

stacklayout1.Children.Add(label1);
stacklayout1.Children.Add(timepicker1);

我的应用程序的用户可以多次创建它。 现在我的问题是,我怎样才能访问,例如,创建的第二个/更好的所有 TimePickers?

【问题讨论】:

stackLayout1.Children[x] 或使用命名引用timepicker1 【参考方案1】:

一些建议:

使用ID

var id = label1.Id;
var text = (stacklayout1.Children.Where(x => x.Id == id).FirstOrDefault() as myLabel).Text;

使用索引

Label labelOne = stacklayout1.Children[0] as Label;

使用标签

为标签创建自定义属性tag

public class myLabel : Label 

    public int tag  get; set; 

并通过标签查找标签:

var labels = stacklayout1.Children.Where(x => x is myLabel).ToList();

foreach (myLabel childLabel in labels)

  if (childLabel.tag == 0)
  

  

顺便说一句,如果你在 xaml 中创建标签,你可以使用findbyname:

Label label = stacklayout1.FindByName("labelA") as Label;

【讨论】:

【参考方案2】:
var timepickers = stacklayout1.Children.Where(child => child is TimePicker);

将返回添加到您的 StackLayout 的所有时间选择器的 IEnumerable。您还必须将 using System.Linq 添加到页面顶部的 usings 中。

【讨论】:

以上是关于如何访问 Xamarin.Forms 中以编程方式创建的 UI 元素:timepicker的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin.Forms 中以正确的文件类型打开字符串

如何以编程方式从Xamarin.Forms ScrollView中删除内容?

我可以以编程方式更改 Xamarin.Forms 中的 styles.xml 吗?

Xamarin.Forms:以编程方式将子项添加到网格的某些列

如何在 Xamarin Forms 中创建隐藏溢出

如何在 Xamarin Forms 的可重用 ViewCell 中绑定命令?