質問を簡単にするために、単純化されたユースケースについて説明します。
1 つの動的な内部グリッドと、トップ レベルのグリッドの特定のセルに収まる ListBox を含むトップ レベルのグリッドがあるとします。
最上位の Grid 構造 (TopGrid.xaml) は比較的静的で、内側の Grid を含むセルの動的サイズのみを使用します。
内部の Grid 構造は動的であり、多くの/不明な種類のコンテンツがありますが、各種類のコンテンツは静的であり、個別の XAML で表すことができます。したがって、InnerGrid_1.xaml、InnerGrid_2.xaml、InnerGrid_n.xaml などがあります。
実行時に、ListBox の選択に応じて、特定の InnerGrid が表示されます。
私はそれを行う2つの方法を考えています:
コード内の XAML を実行時にテキスト編集する: コード内で、XmlDocument を使用して TopGrid.xaml を編集し、特定の InnerGrid_x.xaml のコンテンツを追加して、最終的なインメモリ TopGrid.xaml を作成します。次に、XamlReader を使用して最終的な TopGrid.xaml をビジュアル ツリーに読み取り、そのツリーを LayoutRoot に追加して表示します。
ビジュアル ツリーの操作 (テキスト編集なし): コードでは、XamlReader を使用して TopGrid.xaml をトップ ビジュアル ツリーに読み取り、InnerGrid_x.xaml をサブ ビジュアル ツリーに読み取ります。次に、VisualTreeHelper を使用して、トップ ビジュアル ツリーで TopGrid 要素を見つけ、サブ ビジュアル ツリーで InnerGrid 要素を見つけます。次に、サブビジュアル ツリーをトップ ビジュアル ツリーに追加します。次に、結合されたツリーを LayoutRoot に追加して表示します。
最初の方法が機能することはわかっていますが、コード内で複雑な XML 操作 (またはテキスト編集) が必要です。2 番目の方法が必要ですが、うまくいくかどうかはわかりません。特に、TopGrid のセルのサイズを変更して、動的な InnerGrid を保持するようにします。
誰かがこれを行い、光を当てることができますか? またはより良い解決策はありますか?
副次的な質問: 動的に読み込まれた XAML は、XAML 内でイベント ハンドラーを指定できないようです (私のテスト)。ツリーを作成した後、イベント ハンドラーを動的に設定する必要があります。本当?