2011-08-30 71 views
0

我有一个网格,我已经在其中创建并添加了来自代码背后的元素。隐藏动态创建的网格子元素

Dim staffImgLeft As New Controls.Image() 
staffImgLeft.Name = "StaffImgLeft" 
mainGrid.Children.Add(staffImgLeft) 

当我试图从网格中删除子元素时,它们不会被删除。

mainGrid.Children.Remove(mainGrid.FindName("StaffImgLeft")) 

代码运行时没有错误。任何人都可以建议我的代码为什么不起作用?

回答

1

FindName返回null,因此没有任何东西被删除。

Register的名字,而不是设置它,使之容易找到:

mainGrid.RegisterName("StaffImgLeft",staffImgLeft) 
+0

由于这些代码两个部分在不同的方法,我需要定义staffImgLeft的一个全局变量来实现这一目标? – Lima

+0

不,只需要将这个名称替换为您设置名称的行。 –

+0

伟大的这工作了一种享受。非常感谢您的协助 – Lima

1

您应该使用RegisterNameUnregisterName所以你必须,简化访问NameScope注册的访问。

Dim staffImgLeft As New Controls.Image(); 
staffImgLeft.Name = "StaffImgLeft"; 
mainGrid.Children.Add(staffImgLeft); 
// register name 
mainGrid.RegisterName(staffImgLeft.Name, StaffImgLeft); 

// then remove 
mainGrid.Children.Remove(mainGrid.FindName("StaffImgLeft")); 
// un-register if you intend to re-register an element with the same name later. 
mainGrid.UnregisterName("StaffImgLeft"); 

你或许应该阅读有关WPF XAML名称范围 http://msdn.microsoft.com/en-us/library/ms746659.aspx

+0

谢谢弗雷泽,您的榜样很棒。我首先给出了HB的答案,但是我感谢你的帮助,非常感谢。 – Lima

+0

没问题,很高兴有帮助 – Fraser