Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过循环添加控件-可能吗?_C#_Wpf_Controls - Fatal编程技术网

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

C# 通过循环添加控件-可能吗?,c#,wpf,controls,C#,Wpf,Controls,是否可以通过循环向控件添加控件?困难在于名称:在每个循环中都是相同的,因此我只得到一个名为hu的控件,而不是10。如何修改代码以获得10个Borders 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) typ

是否可以通过循环向控件添加控件?困难在于名称:在每个循环中都是相同的,因此我只得到一个名为
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);
}
for(int i=0;i<10;i++)
{
边界hu=新边界();
hu.宽度=10;
hu.身高=10;
hu.边缘=新厚度(10*i);
hu.Background=(Brush)typeof(Brush).GetProperty(Felder[i]).GetValue(null,null);
mastergrid.Children.Add(hu);
}

首先,是的,这是可能的。您可以这样设置名称

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"
}
public主窗口()
{
初始化组件();
对于(int i=0;i<10;i++)
{
边界hu=新边界();
hu.宽度=10;
hu.身高=10;
hu.边缘=新厚度(10*i);
hu.Tag=anyObject;
hu.MouseDown+=新的鼠标按钮venthandler(hu_MouseDown);
}
}
void hu_MouseDown(对象发送器,MouseButtonEventArgs e)
{
边框b=(边框)发送方;
//b.标签包含您的“任意对象”
}
更新


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

在代码中,您没有创建几个名为“hu”的控件。创建几个未命名的控件时,局部变量的名称无关紧要。这样做应该很好,除非你需要名字。如果您这样做,您可以为每个控件创建一些唯一的名称。

我想这是WPF?添加。您发布的代码中出现了什么错误?我不建议使用这种方法在WPF中创建控件。请注意,循环中的变量名“hu”与每个控件的name属性没有任何关系。上面的方法应该可以正常工作。也许它们是重叠的?您可以尝试使用堆栈面板代替mastergrid的网格。或者尝试添加列和行。啊,好的,有意义。在过去,我几乎在每一个答案中都使用了这一点。从现在起,我将离开它。谢谢我认为说
hu
是实例的名称是不准确的。它是保存实例的变量的名称。可能有多个变量包含同一个实例。好的观点@svick我将更新我的答案以更准确。