2010-06-22 12 views
7

Was wäre der beste Ansatz zum Anzeigen von Fußnoten für FlowDocument-Inhalt in einem FlowDocumentPageViewer?Implementieren von Fußnoten in einem WPF FlowDocument

Mein erster Gedanke war, dass der Inhalt der Fußnote unmittelbar nach dem Fußnotenanker innerhalb des FlowDocuments folgt, wobei der Fußnoteinhalt wie eine Figur formatiert ist, wobei VerticalAnchor auf PageBottom gesetzt ist.

Das funktioniert gut, aber wenn mehrere Fußnoten auf einer Seite sind, werden die Fußnoten in umgekehrter Reihenfolge gestapelt, d. H. Die erste Fußnote ist ganz unten, mit nachfolgenden Fußnoten darüber gestapelt.

Eine weitere Schwierigkeit bei diesem Ansatz besteht darin, dass lange Fußnoten keine Seiten überspannen dürfen, wie in Abbildung nicht erlaubt ist. Ein extremerer Ansatz wäre es, dasselbe in umgekehrter Reihenfolge zu tun - formatieren Sie den regulären Text als gestapelte Figuren, wobei VerticalAnchor auf PageTop gesetzt ist, und lassen Sie die Fußnoten auf der Unterseite fließen. Absätze (die länger als Fußnoten sind) werden nun jedoch keine Seiten mehr umfassen.

Welche anderen Ansätze kann ich versuchen?

Idealerweise möchte ich die Fußnoten so anzeigen, wie sie gedruckt erscheinen würden (d. H. Am Ende der Seite, für die sie relevant sind), aber ich bin offen für andere Ansätze.

Dies ist für eine Leser-App für spezielle akademische Inhalte, wo lange und häufige Fußnoten die Norm sind und sollte Teil der Leseerfahrung sein. Aus diesem Grund möchte ich keine Endnoten verwenden und ziehe Fußnoten vor, die unten auf jeder Seite angezeigt werden.

Antwort

3

Ich habe eine Weile damit verbracht und muss zustimmen, dass es keinen "netten und einfachen" Weg zu machen scheint.

Ich habe versucht, meine eigenen Wrapper-Klassen aus den Floater und Figur-Klassen abzuleiten, aber es wird sehr schnell sehr verworren, da Seitenumbruch (zumindest für mich) erschreckend ist. Das Problem dabei ist, dass sich die Figur in XAML an einem Elternteil verankern lässt, während der Floater all die netten Funktionen hat, die man braucht - wie Paginierung - aber er kann nirgends verankert werden ... wirklich etwas von einem Catch 22 , sogar in .NET 4.0.

Ich fand zwei Links here und here, die helfen könnten. Der erste mag auf den ersten Blick ein bisschen irrelevant erscheinen, aber schaut euch den Code an und ihr solltet die Idee verstehen) Ich habe mit dem Code herumgespielt und die allgemeine Idee funktioniert. Es definiert eine Wrapper-Klasse um den DocumentPaginator herum und ermöglicht Ihnen so, die tatsächliche Seitennumerierung zu steuern.

Hoffentlich hilft das ein bisschen trotzdem.

Verwandte Themen