2011-08-30 72 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