15

我正在寻求一些帮助,以找到引用在 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;

谢谢

4

2 回答 2

34

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

  • 使用FindName父容器的方法找到控件(但它会在内部涉及循环,如visualtreehelper)

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

    var controls = new Dictionary<string, FrameworkElement>();
    controls.Add("_marketInfo5", lbl);
    

    然后你可以这样做:

    controls["_marketInfo5"].Tag = timeNow;
    
于 2012-09-02T18:39:53.660 回答
0

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

XamlQuery.Search(RegisterGrid, "Label[Name=_marketInfo5]").SetValue(Control.TagProperty, timeNow);
于 2015-08-10T13:00:37.320 回答