我在运行时以编程方式添加一个元素:
private void AddModule(string modulename, string ip, string description)
{
ModuleInfobox infobox = new ModuleInfobox();
infobox.Modulename = modulename;
infobox.IpAddress = ip;
infobox.Description = description;
infobox.Modulenamecolor = "Lime";
infobox.Name = modulename;
ModulePanel.RegisterName(infobox.Name, infobox);
ModulePanel.Children.Add(infobox);
}
ModuleInfoBox 是我的UserControl
. 现在我需要一个对这个对象的引用。我试试这个:
private FindLogicalNodeDelegate delFindLogicalNode;
private FindNameDelegate delFindName;
delegate object FindLogicalNodeDelegate(DependencyObject wantedObject, string name);
delegate object FindNameDelegate(string name);
delFindLogicalNode = new FindLogicalNodeDelegate(LogicalTreeHelper.FindLogicalNode);
delFindName = new FindNameDelegate(ModulePanel.FindName);
在一个线程中:
object wantedObject = ModulePanel.Dispatcher.BeginInvoke(delFindLogicalNode, DispatcherPriority.Normal, ModulePanel, "modulename").Result;
object wantedObject2 = this.Dispatcher.BeginInvoke(delFindName, DispatcherPriority.Normal, "moduleName").Result;
当我使用调试器时,FindLogicalNode 有时会找到一个引用,但通常不会。我阅读了这些主题:WPF - FindName 在不应该返回 null并且如果在代码中添加元素但“FindName”不起作用 但我的代码中仍然存在错误