我正在做一个silverlight项目,在用户控件中我有很多复选框。我有另一个包含某些字符串的列表,对于此列表中存在的每个字符串,我想检查其相应的复选框。
我用列表中的字符串命名了复选框。但是如何为复选框名称使用变量名称,以便我不必记下每个chkbox名称?
示例:我想做类似的事情
foreach (string subject in mylistofsubjects)
{
[subject].Checked=true;
}
这可能吗?或者可以做任何变通办法吗?
非常感谢
答案 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;