有什么方法可以自动为每个 UI 元素实现此目的吗?
var UI = new UI(){ Name="MyUI", Tag=??? }
例如,可能有一个按钮
var btn = new Button(){ Name="myButton", Tag=??? }
当然,我可能会手动完成,但对于任何元素来说,它都会变得无聊且容易出错。 当我必须在 UI 树上搜索它时,这会对我有帮助
谢谢
不确定这是一个WinForms应用程序还是其他应用程序,但如果它是一个WinForms应用程序,您可以递归地获取表单的所有子控件并将Tag设置为控件的名称。这应该在 InitializeComponent 调用之后完成(以确保所有控件都已创建并初始化),这通常是构造函数的一部分。
这是一些示例代码:
protected static IList<T> GetChildren<T>(Control control)
where T : Control
{
if (control?.Controls== null)
return new List<T>();
var childControls = control.Controls.OfType<T>();
return childControls.SelectMany(GetChildren<T>).Concat(childControls).ToList();
}
public UI()
{
InitializeComponent();
var controls = GetChildren<Control>(this);
foreach (var control in controls)
control.Tag = control.Name;
}
这只是一种潜在的方法。