是否有与文本内容等效的 ItemsControl?
-
12-09-2019 - |
题
我有一些数据想要在 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(
在每个项目上。