私は、ContentPropertyAttributeを使用してその子パネルの1つの子プロパティを公開するSilverlight UserControlを持っています。これは私が私のページ上のパネルに子コントロールを追加することができます:UserControl子コントロールとFindName
<local:MyUserControl>
<TextBox Name="tbTest" />
</local:MyUserControl>
これは離れページの「tbTest」フィールドが存在することから、動作しますが、初期化されていません。詳細を見ると、InitializeComponentメソッドはTextBox(FindNameを含む)を検索しようとしますが、失敗します(nullを返します)。
いくつかの調査の後、私は名前スコープが問題であることを発見しました.UserControlは独自のネームスコープを持っています。したがって、子はページのFindNameではなく、UserControlのFindNameメソッドで見つけることができます。
私のUserControlを変更して、子コントロールをInitializeComponentメソッドで検索できるようにするにはどうすればよいですか?標準的なパネル(StackPanel、Gridなど)に問題はないようですので、解決策が必要ですか?
おかげ
私はこれが必要であることに驚いていますが、私は試してみましょう。標準的なパネルを特別なものにすることで、この問題を回避することができますか?おそらく私はこれらのうちの1つから派生することができますか? – Barguast
これらのパネルに特別なものは何もありません。特別なUserControlです。コンテナコントロールとして使用するようには設計されていませんが、ContentPropertyAttributeを使用して、それをちょっとした作業にする方法が見つかりました。クラスがパネルであればPanelから確かに派生することができますが、あなたが記述したものから、ItemsControlがより適切であるように思われますので、私はそれを提案しました。 – Josh