6

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

为此,我想<List>ObservableCollection. 我知道如何使用 来做到这一点ItemsControl,但是我该如何对 a 中的ListItem元素进行操作FlowDocument,因为它们是TextElement类层次结构而不是Control层次结构的一部分?a or中是否有相当于ItemsControlfor 文本内容的内容?TextBlockFlowDocument


编辑: Sergey 链接到的文章是完美的起点。唯一的问题是文章的代码只能使用 aSection或 aTableRowGroup作为项目面板,还不支持使用 a <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

FlowDocument您可以使用 anItemsControl并将用于显示项目的面板更改为WrapPanel ,而不是使用。这将允许您随意使用ItemsControl,但将其显示语义更改为 a WrapPanel(我相信它的功能类似于 a FlowDocument。您可以这样做:

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

您可以根据需要在内部设置任何属性WrapPanel

于 2009-08-10T21:19:23.367 回答
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}" />

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

于 2009-08-11T05:42:23.660 回答