我有一些数据想要在 FlowDocument. 。这基本上是一个以友好的方式解释数据的视图,带有节标题、文本段落等,我将在 FlowDocumentScrollViewer 中显示它。

为此,我想创建一个项目符号列表(<List>)的内容 ObservableCollection. 。我知道怎么做 ItemsControl, ,但我该怎么做 ListItem 中的元素 FlowDocument, ,因为它们是 TextElement 类层次结构而不是 Control 等级制度?是否有相当于 ItemsControl 对于 a 内的文本内容 TextBlock 或者 FlowDocument?


编辑:文章 谢尔盖链接是一个完美的起点。唯一的问题是文章的代码只能使用一个 Section 或一个 TableRowGroup 作为项目面板,尚不支持使用 <List>. 。但这很容易修复——只需在末尾添加此代码即可 ItemsContent.GenerateContent, ,就在决赛之前 else:

else if (panel is List)
    ((List) panel).ListItems.Add((ListItem) element);
有帮助吗?

解决方案

您要寻找的是可能的,但需要大量的编码。幸运的是,文森特·范·丹·伯格(Vincent van den Berghe)在MSDN上发表了一篇不错的文章,描述了如何 使用流文档和数据绑定来创建灵活的UI ,包括代码!

其他提示

而不是使用 FlowDocument, ,你可以使用 ItemsControl 并将用于显示项目的面板更改为 包裹面板. 。这将允许您使用 ItemsControl 根据需要,但将其显示语义更改为 WrapPanel (我相信它的功能就像 FlowDocument. 。你会这样做:

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

您可以在内部设置任何属性 WrapPanel 如你所愿。

我认为您正在寻找列表元素:http://msdn.microsoft.com/en-us/library/system.windows.documents.list.aspx

BubbleWrap指出了更多细节。您可能会绑定到ListItems属性,并且需要使用ValueConverter将源列表转换为listItemScollection的列表。

BubbleWrap指出这是ReadOnly,ListItemScollection具有内部构造函数。所以...

我认为您要做的是:

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

这很不幸,但我认为这会起作用。您必须编写一个转换器来创建一个新列表对象并调用 .Add( 在每个项目上。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top