Frage

Ich habe einige Daten, die ich in a präsentieren möchte FlowDocument. Dies ist im Grunde eine Ansicht, die die Daten freundlich erklärt, mit Abschnittsüberschriften, Textabsätzen usw. und die ich in einem FlowDocumentsCrollViewer anzeigen werde.

Zu diesem Zweck möchte ich eine Kugelliste erstellen (<List>) aus dem Inhalt eines ObservableCollection. Ich weiß, wie man das macht ItemsControl, aber wie mache ich das für ListItem Elemente in a FlowDocument, da sie Teil der sind TextElement Klassenhierarchie eher als die Control Hierarchie? Gibt es ein Äquivalent von ItemsControl Für Textinhalte in a TextBlock oder FlowDocument?


Bearbeiten: Das Artikel Sergey, mit dem verknüpft ist, ist der perfekte Ausgangspunkt. Das einzige Problem ist, dass der Code des Artikels nur a verwenden kann Section oder ein TableRowGroup als Element -Panel und unterstützt noch nicht mit a <List>. Aber das war trivial zu beheben - nur eine Frage des Hinzufügens dieses Code am Ende von ItemsContent.GenerateContent, kurz vor dem Finale else:

else if (panel is List)
    ((List) panel).ListItems.Add((ListItem) element);
War es hilfreich?

Lösung

Was Sie suchen, ist möglich, erfordert jedoch eine erhebliche Menge an Codierung. Glücklicherweise hat Vincent van den Berghe einen schönen Artikel über die MSDN veröffentlicht, in der beschrieben wird, wie es geht Erstellen Sie flexible Benutzeroberflächen mit Durchflussdokumenten und Datenbindung , einschließlich des Code!

Andere Tipps

Anstatt a zu verwenden FlowDocument, Sie können eine verwenden ItemsControl und ändern Sie das für die angezeigte Panel, mit dem Elemente auf a angezeigt werden Wrappanel. Dadurch können Sie die verwenden ItemsControl Wie Sie möchten, aber ändern Sie seine Anzeigesemantik in a WrapPanel (was ich glaube, funktioniert wie a FlowDocument. Du würdest es so etwas machen:

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

Sie können alle Eigenschaften auf das Innere festlegen WrapPanel wie du willst.

Ich denke, Sie suchen nach dem Listenelement:http://msdn.microsoft.com/en-us/library/system.windows.documents.list.aspx

Bubblewrap weist auf ein paar weitere Details hin. Sie würden wahrscheinlich an die ListItems -Eigenschaft binden und müssen mit einem Wertschöpfungsversorter Ihre Quellliste in eine Liste der Typ -ListItemScollection konvertieren.

BubbleWrap weist darauf hin, dass dies readonly ist und dass die ListItemScollection einen internen Konstruktor hat. So...

Ich denke, was Sie tun müssten, ist Folgendes:

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

Das ist ziemlich unglücklich, aber ich denke, es würde funktionieren. Sie müssten einen Konverter schreiben, um ein neues Listenobjekt zu erstellen und anzurufen .Add( auf jedem Artikel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top