【发布时间】:2011-07-29 02:11:55
【问题描述】:
我有以下代码,其中单击事件会动态地为 WrapPanel 创建额外的 Canvas,并且每个 Canvas 都包含一个 TextBox 和一个 Button。单击一个 Canvas 上的按钮后,TextBox.Text 和 Button.Content 从“Foo”变为“Jesus”。
以下代码有效,但并不理想。因为每个属性都更改(“Foo”为“Jesus”),所以我必须运行一个循环。我必须运行两个循环才能更改 TextBox 和 Button 上的文本。有没有直接的方法来更改属性而不是循环? 我的实际应用程序在 Canvas 中包含 30 多个控件,我不想每次运行 30 多个循环只是为了更改一些文本。
List<Canvas> cvList = new List<Canvas>();
List<TextBox> tbList = new List<TextBox>();
List<Button> FooList = new List<Button>();
WrapPanel wp = new WrapPanel();
private void createbtn1_Click(object sender, RoutedEventArgs e)
{
Canvas cv = new Canvas();
StackPanel sp = new StackPanel();
TextBox tb = new TextBox();
Button Foo = new Button();
sp.Orientation = Orientation.Vertical;
sp.Children.Add(tb);
sp.Children.Add(Foo);
cv.Children.Add(sp);
wp.Children.Add(cv);
cvList.Add(cv);
tbList.Add(tb);
FooList.Add(Foo);
cv.Width = 100;
cv.Height = 100;
tb.Text = "#" + (cvList.IndexOf(cv)+1);
tb.Width = 50;
tb.Height = 30;
Foo.Content = "Foo";
Foo.Click += destroy_Click;
}
private void Foo_Click(object sender, RoutedEventArgs e)
{
Button b = sender as Button;
var bIndex = FooList.IndexOf(b);
foreach (TextBox t in tbList)
{
if (tbList.IndexOf(t) == bIndex)
{
t.Text = "Jesus";
}
}
foreach (Button f in FooList)
{
if (FooList.IndexOf(t) == bIndex)
{
t.Content = "Jesus";
}
}
}
【问题讨论】: