实际上问题是我无法在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);
实际上有什么问题,请解释我错在哪里,因为早些时候非常感谢你的帮助。
答案 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#
中的实例和变量。