Реализация сносок в WPF FlowDocument - PullRequest
7 голосов
/ 22 июня 2010

Как лучше всего отобразить сноски для содержимого FlowDocument в FlowDocumentPageViewer?

Моя первая мысль состояла в том, чтобы содержимое сноски следовало сразу же после привязки сноски в FlowDocument, а содержимое сноски было отформатировано как рисунок с VerticalAnchor, установленным в PageBottom.

Это прекрасно работает, но когда на странице несколько сносок, сноски располагаются в обратном порядке, т. Е. Первая сноска располагается полностью внизу, а последующие сноски накладываются поверх нее.

Другая трудность в этом подходе заключается в том, что длинные сноски не могут занимать страницы, поскольку рисунок не позволяет этого.

Более экстремальный подход заключается в том, чтобы сделать то же самое в обратном порядке - отформатировать обычный текст как сложенные фигуры с VerticalAnchor, установленным на PageTop, и позволить сноскам течь внизу. Однако абзацы (которые, как правило, длиннее сносок) теперь не будут занимать страницы.

Какие еще подходы я могу попробовать?

В идеале я хотел бы отображать сноски в том виде, в каком они будут напечатаны (т. Е. Внизу страницы, к которой они относятся), но я открыт для других подходов.

Это приложение для читателей для специализированного академического контента, где длинные и частые сноски являются нормой и должны быть частью опыта чтения. По этой причине я не хочу использовать сноски и предпочитаю сноски, отображаемые внизу каждой страницы.

1 Ответ

3 голосов
/ 15 июля 2010

Я провел некоторое время, глядя на это, и должен согласиться с тем, что, похоже, не существует "приятного и простого" способа сделать это.

Я попытался вывести свои собственные классы-обертки из классов Floater и Figure, но он очень запутался очень быстро, так как нумерация страниц ужасна (по крайней мере для меня).Проблема в том, что рисунок позволяет привязываться к родительскому элементу в XAML, тогда как Floater обладает всеми необходимыми функциями, такими как нумерация страниц, но его нельзя привязать ни к чему ... на самом деле, немного Catch 22Даже в .NET 4.0.

я нашел две ссылки здесь и здесь , которые могут помочь.Первый может показаться немного неуместным на первый взгляд, но посмотрите на код, и вы должны понять) Я поиграл с кодом, и общая идея работает.Он определяет класс-оболочку вокруг DocumentPaginator и, следовательно, позволяет вам контролировать фактическую нумерацию страниц.

Надеюсь, в любом случае это немного поможет.

...