2012-12-04 51 views
2

我需要根據需要動態生成儘可能多的標籤,並在需要時訪問它們中的每一個。但FindName()一直沒工作......找不到動態生成的控件,使用WPF中的FindName()

下面是我做什麼

一個簡單的例子,我有一個自定義編寫的類,從Label類繼承,稱爲myLabel。 我已經在我的WPF項目上放了一個按鈕。通過點擊它,myLabel類的實例會動態地創建並添加到網格(myGrid)像這樣:

myLabel LBL = new myLabel(); 
LBL.Height = 30; 
LBL.Name = "MyLabel1"; 
LBL.Content = "I am a label."; 
myGrid.Children.Add(LBL); 

還有一個叫「改變顏色」,它應該找到前面創建的標籤,並改變它的按鈕前景色。下面是按鈕的單擊事件中的代碼:

Label Thelabel = (Label)myGrid.FindName("MyLabel1"); 
Thelabel.Foreground = Brushes.Azure; 

的問題是,FindName()從來沒有發現任何東西,總是空! 我該如何解決這個問題?

回答

2

可能會導致名稱範圍導致'FindName'返回null的問題。

查找特定的命名元素,從父開始不同方法的解釋/祖先可以在這篇文章中找到:How can I find WPF controls by name or type?

給一個嘗試,看看它是否適合你。

+0

非常感謝!我用第一種方法,它的工作! :) – Ali

+0

優秀!當你嘗試的第一件事情時,它總是很好:) –

+0

是的,這是非常激勵:) 再次謝謝chamila_c;) – Ali