0

Canvas在运行时创建了多个,每个Canvas都有一个TextBox作为孩子。这些CanvasWrapPanel. 我的代码如下:

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 个画布后,我需要更改一个特定 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 == ????)
{}
}

我应该将我的发件人与什么进行比较?

4

1 回答 1

2

正如我试图在你的最后一个问题中解释的那样(你可能应该已经更新了)你不需要单独的列表,只需WrapPanel直接使用它来访问它的孩子 - 你知道你只向Canvas你的元素添加了元素,WrapPanel因此你可以适当地投射:

TextBox textbox = (wp.Children[5] as Canvas).Children[0] as TextBox;
textbox.Text = "Hello";
于 2011-04-04T03:20:16.990 回答