1

WP7でコメントツリーを表示する画面を実装したいです。各コメントには、子コメントなどを含めることができます。各子コメントは、インデントによって親と視覚的に区別されます

すなわち:

"comment text"
    "Some child comment text"
    "Some child comment text"
        "some child comment text"
"comment text"
    "Some child comment text"

これを実装するための最良の方法は何でしょうか? 実装をできるだけシンプルに保ちたいので、最初は単一の ListBox を使用し、ツリー内の深さに応じて各コメント/ListItem のパディング/マージンをプログラムで設定できると考えていました。しかし、私はそれを機能させることができないようです。例、提案、推奨事項などはありますか?

編集: いくつかの追加の読み取りを行うと、DataTrigger はこの種のものに最適だったようですhttp://www.codeproject.com/Articles/113152/Applying-Data-Templates-Dynamically-by-Type-in ​​-WP7 ...しかし、WP7 はトリガーをサポートしていません。

私が持っていたもう1つのアイデアは、Margin/PaddingをCommentクラスのプロパティにしてから、それにデータバインドすることでした...これは機能するはずですが、Commentクラスを表示情報で汚染しています。マージン/パディングの値をデータバインドする方法についてのアイデアはありますが、モデルとビューのコードを混在させることはできませんか?

4

3 に答える 3

2

ゼロから、または既存のコントロールから何かを組み立てて、独自のロールを作成する必要があります。ListBox は、この目的に適しているように見えます。

この MSDN スレッド (Web アーカイブ - スレッドは現在移動/削除されています) をのぞいてみてください。ListBoxを使用System.Windows.Controls.TreeViewして TreeView をシミュレートすることに関するいくつかの提案と、WP7 で使用できるクレーム (私は確認していません) があります (警告付き)。も必要ですSystem.Windows.Controls.Toolkit)。

Shaun Taulbee によって書かれたマーク付きの回答:

リストボックスでのツリー ビューの動作は、コレクションの処理を少し賢くすることで模倣できます。あなたのクラスがサポートする必要があると思われる機能は、

  • 要素が子コレクションの取得をサポートするコレクション

  • 同様に、要素に子コレクションがあるかどうかを検出できます

  • リストボックスのデータ テンプレートで、子の存在と展開されているかどうかに基づいて、展開状態のスタック パネルの 1 つの要素を表示します。

  • リストボックスのデータ テンプレートで、子の深さを反映するインデント用のスタック パネルの 1 つの要素を表示します。クリックしたばかりの親アイテムのインデントに基づいてインデントを作成できます

  • リストボックスでノードがクリックされると、そのノードの子をリストボックスがバインドされているフラットコレクションに挿入します

  • ノードが再度クリックされると、子はフラット コレクションから削除されます。

これらすべてをきちんとしたクラスにカプセル化して、必要に応じて想像できるかなり単純な再利用可能な API を提供できます。

このスレッドにはかなりのノイズがありますが、一番下に Mark Chamberlain からのコメントがあります。

「TreeView は携帯電話に自然に適合するものではありません。たとえば、ListBox アイテム テンプレート、ピボット、またはその他のリスト パターンを使用して、Treeview を他の方法でエミュレートできます。これは、ツリーのレベル数によって異なります。

「たとえば、ListItem をテンプレート化して、同じアイテム テンプレートを持つラベルと別の Listbox を含めることができます。これを行うと、処理が必要な数のレベルでドリルをエミュレートできますが、一度に 1 つの分岐のみをエミュレートできます。」

「TreeView を再テンプレート化できる場合があります (ソースは Silverlight ツールキットでも入手できます) が、これはサポートされているシナリオではありません。電話で見栄えを良くするには、かなりの量の作業を行う必要があります。デザインと再テンプレート化の観点から。」

于 2012-04-10T14:40:27.077 に答える
0

以下は、ListBox コントロールの ItemTemplate を変更する良い出発点である必要があります:-

http://3water.wordpress.com/2010/07/25/listbox-on-wp7/

http://weblogs.asp.net/psheriff/archive/2010/10/27/windows-phone-list-box-with-images.aspx

于 2012-04-10T13:49:29.570 に答える