通过循环添加控件 - 可能吗?

时间:2011-12-13 17:49:14

标签: c# wpf controls

是否可以通过循环向控件添加控件?难点是名称:它在每个循环中都是相同的,所以我只得到一个名为hu的控件而不是10.如何修改代码以获得10 Border s?

for (int i = 0; i < 10; i++)
{
    Border hu = new Border();
    hu.Width = 10;
    hu.Height = 10;
    hu.Margin = new Thickness(10 * i);
    hu.Background = (Brush) typeof(Brushes).GetProperty(Felder[i]).GetValue(null, null);
    mastergrid.Children.Add(hu);
}

2 个答案:

答案 0 :(得分:3)

首先,是的,这是可能的。你可以做的是像这样设置名称

hu.Name = string.Format("Border_{0}", i);

也许不是在边框的情况下,而是例如按钮。我怎样才能得到 因为你绑定了负责事件控制的数据 一个事件到几个控件。通常使用Control.Tag属性添加其他内容 数据并在事件中使用它们。例如:

public MainWindow()
{
    InitializeComponent();

    for (int i = 0; i < 10; i++)
    {
        Border hu = new Border();
        hu.Width = 10;
        hu.Height = 10;
        hu.Margin = new Thickness(10 * i);
        hu.Tag = anyObject;
        hu.MouseDown += new MouseButtonEventHandler(hu_MouseDown);
    }
}

void hu_MouseDown(object sender, MouseButtonEventArgs e)
{
    Border b = (Border)sender;
    // b.Tag contains your "anyObject"
}

<强>更新

请注意,保存您实例的变量的名称(在您的情况下为“hu”)与您的控件的Name属性不同。

答案 1 :(得分:0)

在您的代码中,您不会创建名为“hu”的多个控件。您创建了几个未命名的控件,本地变量的名称无关紧要。这样做应该完全没问题,除非你需要这个名字。如果这样做,您可以为每个控件创建一个唯一的名称。