添加到网格多个元素

时间:2013-01-19 17:03:48

标签: c# winforms listbox grid

实际上问题是我无法在Grid中添加我的ListBoxItem多个元素。

ListBoxItem _ListBoxItem = null;

   _ListBoxItem = LoginThread as ListBoxItem;
   LoginThread.Name = "LoginThread1";
   OkChild.Children.Insert(0, _ListBoxItem);

   _ListBoxItem = LoginThread as ListBoxItem;
   LoginThread.Name = "LoginThread2";
   OkChild.Children.Insert(1, _ListBoxItem);

这是一个获取错误代码:指定的Visual已经是另一个Visual的子项或CompositionTarget的根。 如果要添加一个空的ListBoxItem,那么工作正常,但它是定义并添加自己的ListBoxItem失败。 这类似于以下内容:

1)此方法可能只在Grid中添加一个项目

ListBoxItem obj = new ListBoxItem ();
obj = MyListBoxItem;

2)像这样工作

ListBoxItem obj = new ListBoxItem ();
for (int i = 0; i <100 500; i + +)
MyGrid.Children.Add (obj);

实际上有什么问题,请解释我错在哪里,因为早些时候非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

视觉元素的单个实例只能添加到可视树中一次。在您的第一个代码段中,您要将LoginThread添加到OkChild两次。您不必每次都将ListBoxItem分配给LoginThread,而是创建新的_ListBoxItem。正确版本的代码如下:

ListBoxItem _ListBoxItem = null;

// Create a new ListBoxItem
_ListBoxItem = new ListBoxItem();
LoginThread.Name = "LoginThread1";
OkChild.Children.Insert(0, _ListBoxItem);

// Again, create a new ListBoxItem. We can reuse the same variable, _ListBoxItem, to refer
// to the new ListBoxItem, but it is very important that we actually create a new one.
_ListBoxItem = new ListBoxItem();
LoginThread.Name = "LoginThread2";
OkChild.Children.Insert(1, _ListBoxItem);

在您编写的第二个代码段中:

ListBoxItem obj = new ListBoxItem ();
obj = MyListBoxItem;

首先创建一个新的ListBoxItem并使变量obj引用它。但是下一行然后重定向变量obj,而不是引用变量MyListBoxItem所指的任何内容。您现在已完全丢失对刚创建的ListBoxItem的任何引用。你或许打算写一下吗?:

ListBoxItem obj = new ListBoxItem ();
MyListBoxItem = obj;

在第三个代码段中,您创建一个ListBoxItem,然后在MyGrid循环中反复将同一项添加到for。你可能想写:

for (int i = 0; i < 100; i++)
{
    ListBoxItem obj = new ListBoxItem();
    MyGrid.Child.Add(obj);
}

请参阅,现在在循环的每次迭代中都会创建一个新的ListBoxItem,然后将其添加到MyGrid

我建议你花一些时间来学习C#中的实例和变量。