2011-04-04 50 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