如何使用其名称查找控件?

时间:2014-02-20 08:39:17

标签: c# silverlight variables reference controls

我正在做一个silverlight项目,在用户控件中我有很多复选框。我有另一个包含某些字符串的列表,对于此列表中存在的每个字符串,我想检查其相应的复选框。

我用列表中的字符串命名了复选框。但是如何为复选框名称使用变量名称,以便我不必记下每个chkbox名称?

示例:我想做类似的事情

 foreach (string subject in mylistofsubjects)
 {
      [subject].Checked=true;

 }

这可能吗?或者可以做任何变通办法吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

您可以简单地使用FindName()方法,如果您确定它存在并且它具有正确的类型,那么:

foreach (string subject in mylistofsubjects)
    ((CheckBox)FindName(subject)).Checked = true;

调用正确容器的FindName()(此处我假设它是this)。如果它们嵌套在多个面板中,那么您可能需要浏览可视树,请阅读this article以获取更多信息。举个例子看看this library,你就可以写下这个:

foreach (string subject in mylistofsubjects)
    ((CheckBox)this.Descendants().First(x => x.Name == subject)).Checked = true;

或者简单地说:

this.Descendants()
    .Where(x => mylistofsubjects.Contains(x.Name))
    .Cast<CheckBox>()
    .Checked = true;