如何访问 Xamarin.Forms 中以编程方式创建的 UI 元素:timepicker
How can I access programmatically created UI Elements in Xamarin.Forms : timepicker
我得到了一个以编程方式创建 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?
var timepickers = stacklayout1.Children.Where(child => child is TimePicker);
将 return 所有时间选择器的 IEnumerable 添加到您的 StackLayout。您还必须在页面顶部的使用中添加使用 System.Linq。
一些建议:
使用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;
我得到了一个以编程方式创建 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?
var timepickers = stacklayout1.Children.Where(child => child is TimePicker);
将 return 所有时间选择器的 IEnumerable 添加到您的 StackLayout。您还必须在页面顶部的使用中添加使用 System.Linq。
一些建议:
使用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;