2011-08-30 20 views
0

私はグリッドを作成し、コードの要素を追加しました。グリッドの動的に作成された子要素を非表示にする

Dim staffImgLeft As New Controls.Image() 
staffImgLeft.Name = "StaffImgLeft" 
mainGrid.Children.Add(staffImgLeft) 

子要素をグリッドから削除しようとすると、削除されません。

mainGrid.Children.Remove(mainGrid.FindName("StaffImgLeft")) 

コード実行時にエラーはありません。誰も私のコードが動作していない理由を助言することはできますか?

答えて

1

FindNameはnullを返します。したがって、何も削除されません。

Register名の代わりに、それが検索可能にするためにそれを設定する:

mainGrid.RegisterName("StaffImgLeft",staffImgLeft) 
+0

について読み、私はこれを達成するためにstaffImgLeftのグローバル変数を定義する必要がありますでしょうか? – Lima

+0

いいえ、名前を設定した行を置き換えてください。 –

+0

これは素晴らしいことでした。ご協力いただきありがとうございます – Lima

1

あなたはNameScopeの登録へのアクセスを簡素化するアクセサを持っているので、あなたがRegisterNameUnregisterNameを使用する必要があります。

Dim staffImgLeft As New Controls.Image(); 
staffImgLeft.Name = "StaffImgLeft"; 
mainGrid.Children.Add(staffImgLeft); 
// register name 
mainGrid.RegisterName(staffImgLeft.Name, StaffImgLeft); 

// then remove 
mainGrid.Children.Remove(mainGrid.FindName("StaffImgLeft")); 
// un-register if you intend to re-register an element with the same name later. 
mainGrid.UnregisterName("StaffImgLeft"); 

あなたはおそらく、コードのこれらの2つのセクションでは、異なる方法であるとWPF XAML名前スコープ http://msdn.microsoft.com/en-us/library/ms746659.aspx

+0

おかげでフレーザー、あなたの例は素晴らしかったです。私は彼が最初に入っていたので、私はあなたの援助に感謝しますが、私はHBへの答えを与えた、それは非常に感謝しています。 – Lima

+0

問題なし、喜んで助けた – Fraser

関連する問題