c# - 按名称查找 WPF 控件

标签 c# 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;

如何从另一个方法引用这些控件?我读过一些建议使用 visualtreehelper 的帖子,但这似乎需要循环控件才能找到特定控件。有没有办法通过名称访问控件以避免循环?

例如类似于

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

谢谢

最佳答案

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

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

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

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

    然后你可以这样做:

    controls["_marketInfo5"].Tag = timeNow;
    

关于c# - 按名称查找 WPF 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12238599/

相关文章:

C# MemberwiseClone 不起作用

c# - 是否可以更改 Visual Studio 中的编码约定

C#定期从串口读取新行

c# - 传递引用和使用局部变量的性能差异

c# - 用 C# 编写二进制文件,然后用 C++ 读取同一文件

c# - 在 C# 中实现 De Boor 样条算法

c# - DependencyObject 找不到目标元素的管理 FrameworkElement,即使该对象位于 FrameworkElement 的逻辑树中

wpf - 将附加的依赖项属性值传播到模板

c# - 在WPF中保存控件的图像(屏幕截图) - MVVM模式

c# - 在 XAML 中重命名控件