2011-04-04 51 views
0

我在運行時創建了多個Canvas,並且每個Canvas都有一個TextBox作爲Children。這些CanvasWrapPanel的子女。我的代碼如下:訪問列表中的UIElement.Properties <UIElement>

List<Canvas> cvList = new List<Canvas>(); 
WrapPanel wp = new WrapPanel(); 

// function (e.g. a Click event) to add a Canvas with a TextBox 
Canvas cv = new Canvas(); 
TextBox tb = new TextBox(); 
cv.Children.Add(tb); 
cvList.Add(cv); 
wp.Children.Add(cv); 

如果後處理功能時的10倍和10個Canvas是創造,我需要改變一個特定的UIElement的文本(例如第5文本框)。我會怎麼做?在數組中沒有像這樣的索引。

[編輯] 如果我有一個按鈕點擊事件也是在運行時產生的,每個按鈕將關閉其相應的帆布:

List<Button> btnList = new List<Button>(); 

// function to add Canvas with a Button 
Button btn = new Button(); 
btn.Content = "Destroy"; 
btn.Click += destroy_Click; 
btnList.Add(btn); 
cv.Children.Add(btn); 

// Destroy click event 
private void destroy_Click(object sender, RoutedEventArgs e) 
{ 
if (sender == ????) 
{} 
} 

我應該怎麼比較我的發送者?

+0

「沒有索引的陣列中使用的那樣的。」就在這裏。 List有一個索引*,就像數組:'cvList [4]'。那麼UIElementCollection(Canvas.Children就是這樣):'cvList [4] .Children [0]'。 – itowlson 2011-04-04 03:25:47

回答

2

當我試圖解釋你last question(你可能只是應該有更新),你並不需要一個單獨的列表,只需使用WrapPanel直接訪問它的孩子 - 你知道你只加了Canvas元素你WrapPanel這樣你就可以適當地投:

TextBox textbox = (wp.Children[5] as Canvas).Children[0] as TextBox; 
textbox.Text = "Hello"; 
+0

謝謝,雖然將問題分開更合適。此外,我編輯我的問題來解釋我的問題,我有一個列表中的UIElement點擊事件。 – KMC 2011-04-04 04:12:00