短いバージョン:
TreeView
さまざまな種類の項目の階層 ( ) を表示する必要がありますが、Silverlight でこれをきれいに行う方法がわかりません。HierarchicalDataTemplate
WPF では、型に基づいてテンプレート ( ) を定義するのは簡単ですが、この機能は Silverlight では使用できません。Silverlight では、特定のノードのすべての子に同じテンプレートを適用する必要があるようです。そのため、考えられるすべてのタイプのノードを処理する 1 つのモンスター テンプレートが、すべてのノードに適用されることになります。
長いバージョン (例):
より具体的な (ただし不自然な) 例を示すために、さまざまなフォルダー内のアーカイブのツリービューを考えてみましょう。各アーカイブには、写真、曲、およびその他のアーカイブを含めることができます。各フォルダーには、複数のサブフォルダーとアーカイブが含まれる場合があります。
|-Folder
|-Folder
|-Folder
|-Archive
| Photo1
| Photo2
| Song1
| Song2
|-Archive
| Photo1
| Song1
|-Archive
| Photo1
| Photo2
| Photo3
ツリーの各タイプ (フォルダ、アーカイブ、写真、曲) は、異なる方法で表示されます。明らかな解決策は、HierarchicalDataTemplate
表示するアイテムの種類ごとに を作成することのようです。残念ながら、ノード ( ) のすべての子に対して単一のテンプレート タイプを指定する必要があるように思われるため、これを行う良い方法が見つかりませんItemsSource={Binding ...}, ItemsTemplate={StaticResource TemplateForAllChildren}
。
この要件により、テンプレートは雪だるま式になります... アーカイブには、写真、曲、およびアーカイブを子として含めることができます。1 つのテンプレートをすべての子に適用する必要があるため、その 1 つのテンプレートで写真、曲、およびアーカイブを処理できる必要があります。同様に、フォルダのテンプレートはフォルダとアーカイブを処理できる必要があり、アーカイブ テンプレートには写真と歌が含まれているため、すべてが写真、曲、アーカイブ、およびフォルダを処理できる 1 つの巨大なテンプレートになります。より多くのタイプが追加されると、それらも 1 つの巨大なテンプレートにまとめられます。
さまざまなタイプがツリーに追加されるため、1 つの巨大なテンプレート (および関連するノード ビューモデル) を蓄積することなく、これをきれいに行う方法はありますか?
ありがとう!
明確化:
これまでの回答に感謝しますが、元の問題に戻るだけかもしれません。私は答えを誤解しているかもしれません。
以下を示す TreeView を検討してください。
曲の場合: アーティスト/タイトルを含むスクロール テキスト ボックスと再生ボタン
写真の場合: サムネイル画像と星評価コントロール
アーカイブの場合: 圧縮を示すプログレス バーを含むアーカイブ イメージ
フォルダの場合: フォルダ名を示すプレーン ラベル
私が知る限り、これを実現する唯一の方法は、スクロール テキスト ボックス、再生ボタン、サムネイル ビューア、スター コントロール、画像コントロール、進行状況バー、およびラベルを含む 1 つの巨大な HierarchicalDataTemplate を用意することです。次に、ノードに実際に適用される 1 つまたは 2 つのコントロールを除くすべてを選択的に非表示にします。
WPF では、テンプレートをノード タイプに関連付けることができたので、各ノードは適切なテンプレートを使用できました。Silverlightでこれを行う方法があるかどうか疑問に思っています。
再度、感謝します!