我正在寻求帮助,找到引用C#编程的控件的最佳方法
如果我预先在XAML中添加标签并将其命名为marketInfo
,那么在代码中我可以将Tag
属性设置为类似
marketInfo.Tag = timeNow;
但是,我正在构建控件并使用与
类似的东西为每个名称分配System.Windows.Controls.Label lbl = new System.Windows.Controls.Label();
lbl.Content = market.name + " - " + DateTime.Now.ToLocalTime().ToLongTimeString();
lbl.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Left;
lbl.Height = 40;
lbl.Name = @"_" + "marketInfo" + countMarket;
如何从其他方法引用这些控件?我已经阅读了一些建议使用visualtreehelper
的帖子,但这似乎需要循环控件来查找特定控件。有没有办法按名称访问控件以避免循环?
例如与
类似的东西//pseudo code
SomeControl("_marketInfo5").Tag = timeNow;
谢谢
答案 0 :(得分:33)
至少有两种方法可以做到这一点:
使用父容器的FindName
方法查找控件:http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.findname(v=vs.110).aspx(但它内部涉及循环,如visualtreehelper)
创建一个字典来存储您创建的每个控件的引用
var controls = new Dictionary<string, FrameworkElement>();
controls.Add("_marketInfo5", lbl);
然后你可以这样做:
controls["_marketInfo5"].Tag = timeNow;
答案 1 :(得分:0)
您可以使用XamlQuery在运行时查找控件。XamlQuery In CodePlex
XamlQuery.Search(RegisterGrid, "Label[Name=_marketInfo5]").SetValue(Control.TagProperty, timeNow);