3

ContentPropertyAttributeを使用してその子パネルの1つのChildrenプロパティを公開するSilverlightUserControlがあります。これにより、ページのパネルに子コントロールを追加できます。

<local:MyUserControl>
    <TextBox Name="tbTest" />
</local:MyUserControl>

これは、ページの「tbTest」フィールドが存在することを除けば機能しますが、初期化されていません。よく調べてみると、InitializeComponentメソッドは(FindNameを使用して)TextBoxを見つけようとしますが、見つけられません(nullを返します)。

調査の結果、ネームスコープが問題であることがわかりました。UserControlには独自のネームスコープがあるため、ページのFindNameでは子を見つけることはできませんが、UserControlのFindNameメソッドでは見つけることができます。

子コントロールがInitializeComponentメソッドによって配置可能になるようにUserControlを変更するにはどうすればよいですか?標準のパネル(StackPanel、Gridなど)は問題がないように見えるので、解決策が必要ですか?

ありがとう

4

1 に答える 1

1

この時点で実行するのは難しいかもしれませんが、最善のアクションは、UserControlではなくItemsControlからコントロールを取得することです。そうすれば、名前スコープに問題はありません。

回避策として、VisualTreeHelperを使用してコントロールに飛び込み、tbTestフィールドを手動で設定できると思います。

于 2010-12-31T18:15:37.040 に答える