我有一些数据,我想提出一个FlowDocument
。 这主要是解释一种友好的方式中的数据,以节标题,文本段落等,我将在一个FlowDocumentScrollViewer显示视图。
为此,我想创建项目符号列表( <List>
)出来的内容ObservableCollection
。 我知道该怎么做,与ItemsControl
,但我要如何做它ListItem
在元素FlowDocument
,因为他们是一部分TextElement
类层次结构,而不是Control
层次? 是否有一个等价ItemsControl
的内部文本内容TextBlock
或FlowDocument
?
编辑: 文章谢尔盖挂钩是一个完美的起点。 唯一的问题是,文章的代码只能用一个Section
或TableRowGroup
作为项目小组,并且还不支持使用<List>
。 但是,这是微不足道的修复-只是在结尾处添加该代码的事情ItemsContent.GenerateContent
,在决赛前只else
:
else if (panel is List)
((List) panel).ListItems.Add((ListItem) element);
你所寻找的是可能的,但需要编码的显著量。 幸运的是,文森特·范登BERGHE公布在MSDN一个很好的文章描述了如何创建灵活的用户界面随着流量的文件和数据绑定 ,包括代码!
如果不使用的FlowDocument
,你可以使用一个ItemsControl
和更改用于显示项目的面板WrapPanel 。 这将允许您使用ItemsControl
,只要你想,但改变其显示语义的WrapPanel
(我相信功能类似FlowDocument
你会做这样的事情:
<ItemsControl>
<ItemsControl.ItemsPanelTemplate>
<WrapPanel />
</ItemsControl.ItemsPanelTemplate>
</ItemsControl>
您可以在内部设置的任何属性WrapPanel
,你的愿望。
我认为你正在寻找的列表元素: http://msdn.microsoft.com/en-us/library/system.windows.documents.list.aspx
气泡布指出一些细节。 你很可能绑定到listItems属性和需要使用ValueConverter到源列表转换类型ListItemsCollection的列表。
气泡布指出,这是只读的,而且ListItemsCollection有一个内部的构造。 所以...
我认为你必须做的是这样的:
<ContentControl Content="{Binding TheArrayOfText, Converter={StaticResource StringsToListConverter}" />
这是非常不幸的,但我认为这是可行的。 你必须写一个转换器来创建一个新的列表对象并调用.Add(
在每个项目上。