Реализация сносок в WPF FlowDocument

Каков был бы лучший подход для отображения сносок для содержания FlowDocument в FlowDocumentPageViewer?

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

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

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

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

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

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

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

7
задан yclevine 23 June 2010 в 17:19
поделиться

1 ответ

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

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

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

Надеюсь, это хоть немного поможет.

3
ответ дан 7 December 2019 в 16:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: