代码之家  ›  专栏  ›  技术社区  ›  Joe White

是否有文本内容的itemsControl等效项?

  •  6
  • Joe White  · 技术社区  · 15 年前

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

    为此,我要创建项目符号列表( <List> )从 ObservableCollection . 我知道怎么做 ItemsControl 但是我该怎么做呢 ListItem A中的元素 流程文档 因为他们是 TextElement 类层次结构而不是 Control 等级制度?有等价物吗 项目控制 用于a中的文本内容 TextBlock 流程文档 ?


    编辑: 这个 article 谢尔盖是完美的起点。唯一的问题是文章的代码只能使用 Section 或A TableRowGroup 作为项目面板,但还不支持使用 <名单& . 但修复起来很简单——只需在 ItemsContent.GenerateContent 就在决赛前 else :

    else if (panel is List)
        ((List) panel).ListItems.Add((ListItem) element);
    
    3 回复  |  直到 15 年前
        1
  •  9
  •   Sergey Aldoukhov    15 年前

    您正在寻找的是可能的,但需要大量的编码。幸运的是,文森特·范登伯格在msdn上发表了一篇很好的文章,描述了如何 Create Flexible UIs With Flow Documents And Data Binding 包括密码!

        2
  •  0
  •   Andy    15 年前

    而不是使用 FlowDocument ,您可以使用 ItemsControl 并将用于显示项的面板更改为 WrapPanel . 这将允许您使用 项目控制 但将其显示语义更改为 WrapPanel (我认为它的功能就像 流程文档 . 你可以这样做:

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

    您可以在内部设置任何属性 折叠容器 如你所愿。

        3
  •  0
  •   Anderson Imes    15 年前

    我认为您正在查找列表元素: 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( 在每一个项目上。