0

実際の問題は、ListBoxItem を Grid に複数の要素を追加できないことです。

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);

次のエラー コードを取得します。指定されたビジュアルは、既に別のビジュアルの子であるか、CompositionTarget のルートです。空の ListBoxItem を追加すると問題なく動作しますが、独自の ListBoxItem を定義して追加すると失敗します。それは次のようなものです。

1) このメソッドは、グリッドに 1 つのアイテムのみを追加できます

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

2)そして、このようにここで働いています

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

実際には何が問題なのか、どこが間違っているのか説明してください。以前は助けてくれてありがとう。

4

1 に答える 1

0

ビジュアル要素の 1 つのインスタンスは、ビジュアル ツリーに 1 回だけ追加できます。最初のコード セグメントでは、 2 回追加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);

2 番目のコード セグメントでは、次のように記述します。

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

これは最初に newListBoxItemを作成し、変数objがそれを参照するようにします。しかし、次の行は変数をリダイレクトしobjて、変数が参照しているものを代わりに参照しMyListBoxItemます。ListBoxItem作成したばかりの への参照が完全に失われました。あなたはおそらく書くつもりでしたか?:

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

3 番目のコード セグメントでは、1 つ作成し、ループ内でListBoxItem同じ項目をMyGrid何度もに追加しforます。あなたはおそらく次のように書くつもりでした:

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

ListBoxItemループの反復ごとに新しいが作成され、 に追加されMyGridます。

のインスタンスと変数について、もう少し時間をかけて学習することをお勧めしますC#

于 2013-01-19T17:18:47.810 に答える