6

で提示したいデータがありFlowDocumentます。これは基本的に、セクション ヘッダー、テキストの段落などを使用してわかりやすい方法でデータを説明するビューであり、FlowDocumentScrollViewer に表示します。

<List>このために、 の内容から箇条書きリスト ( ) を作成したいと思いますObservableCollection。でそれを行う方法は知っていますが、階層ではなくクラス階層の一部であるため、の要素ItemsControlに対してどのように行うのですか? または内のテキストコンテンツに相当するものはありますか?ListItemFlowDocumentTextElementControlItemsControlTextBlockFlowDocument


編集: Sergey がリンクしている記事は、完璧な出発点ですSection唯一の問題は、記事のコードが項目パネルとしてまたはしか使用できず、 .TableRowGroupの使用をまだサポートしていないこと<List>です。ItemsContent.GenerateContentしかし、それを修正するのは簡単でした-このコードを の最後、最後の の直前に追加するだけelseです:

else if (panel is List)
    ((List) panel).ListItems.Add((ListItem) element);
4

3 に答える 3

9

あなたが探しているものは可能ですが、かなりの量のコーディングが必要です。幸いなことに、Vincent Van Den Berghe が MSDN に素晴らしい記事を投稿し、フロー ドキュメントとデータ バインディングを使用して柔軟な UI を作成する方法について説明し、コードも含めて説明しています。

于 2009-08-11T07:34:51.933 に答える
0

List 要素を探していると思います: http://msdn.microsoft.com/en-us/library/system.windows.documents.list.aspx

Bubblewrap はさらにいくつかの詳細を指摘しています。おそらく ListItems プロパティにバインドし、ValueConverter を使用してソース リストを ListItemsCollection タイプのリストに変換する必要があります。

Bubblewrap は、これが読み取り専用であり、ListItemsCollection に内部コンストラクターがあることを指摘しています。そう...

あなたがしなければならないことはこれだと思います:

<ContentControl Content="{Binding TheArrayOfText, Converter={StaticResource StringsToListConverter}" />

これはかなり残念ですが、うまくいくと思います。.Add(新しい List オブジェクトを作成し、各項目を呼び出すには、コンバーターを作成する必要があります。

于 2009-08-11T05:42:23.660 に答える
0

を使用する代わりに、 を使用して、アイテムの表示に使用するパネルをWrapPanelFlowDocumentに変更できます。これにより、必要に応じて を使用できますが、その表示セマンティクスを に変更します(これは のように機能すると思います。次のようにします。ItemsControlItemsControlWrapPanelFlowDocument

<ItemsControl>
    <ItemsControl.ItemsPanelTemplate>
        <WrapPanel />
    </ItemsControl.ItemsPanelTemplate>
</ItemsControl>

必要に応じて、インナーに任意のプロパティを設定できますWrapPanel

于 2009-08-10T21:19:23.367 に答える