按名称查找WPF控件

我找到了一些帮助,找到了引用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; 

如何从其他方法引用这些控件? 我已经阅读了一些建议使用visualtreehelperpost,但这似乎需要循环控件才能找到特定的控件。 有没有办法按名称访问控件以避免循环?

例如类似的东西

 //pseudo code SomeControl("_marketInfo5").Tag = timeNow; 

谢谢

至少有两种方法可以做到这一点:

  • 使用父容器的FindName方法查找控件: http : //msdn.microsoft.com/en-us/library/system.windows.frameworkelement.findname ( FindName .aspx (但它会内部涉及循环,如visualtreehelper)

  • 创建一个字典来存储您创建的每个控件的引用

     var controls = new Dictionary(); controls.Add("_marketInfo5", lbl); 

    然后你可以这样做:

     controls["_marketInfo5"].Tag = timeNow; 

您可以使用XamlQuery在运行时查找控件。 XamlQuery在CodePlex中

 XamlQuery.Search(RegisterGrid, "Label[Name=_marketInfo5]").SetValue(Control.TagProperty, timeNow);