Текстовая система в WPF в первую очередь предназначена для игры с текстом для использования в пользовательском интерфейсе, а не для создания сложных документов со сносками, заголовками и т. Д. Однако структура была написана так, что если вы хотите добавить пользовательские функции, вы может.
Первая проблема: сноски и другие материалы, которые соответствуют тексту. WPF предоставляет 2 класса для размещения UIElement
s в тексте: InlineUIContainer
и BlockUIContainer
. Я хотел бы написать свой собственный пользовательский элемент управления, специально разработанный для поведения сноски или чего-то подобного, и поместить его в один из этих двух классов. Я нашел эту удобную диаграмму отношений на MSDN, если вам нужна дополнительная информация о том, что и что принимать (ссылки внизу страницы)
альтернативный текст http://i.msdn.microsoft.com/dynimg/IC66504.png
Я не совсем уверен, что вы подразумеваете под «потоком историй в стиле журнала». FlowDocument автоматически расположит Block
-произведенные классы (что-нибудь синее на приведенном выше графике) в доступное пространство, и вы можете сделать текст "обтекающим" вокруг объектов, используя встроенные элементы Floater
и Figure
Вы также можете использовать Figure
и Floater
для функции колонтитулов.
Вот пример кода:
<FlowDocumentScrollViewer>
<FlowDocument>
<Paragraph>
5 green bottles standing on the wall,
5 green bottles standing on the wall,
and if one green bottle was to accidentally fall,
there would be 4 green bottles standing on the wall;
</Paragraph>
<Paragraph>
4 green bottles standing on the wall,
4 green bottles standing on the wall,
<Floater HorizontalAlignment="Left" Width="250">
<BlockUIContainer>
<Button>This button is in a Floater</Button>
</BlockUIContainer>
</Floater>
and if one green bottle was to accidentally fall,
there would be 3 green bottles standing on the wall;
</Paragraph>
<Paragraph>
3 green bottles standing on the wall,
3 green bottles standing on the wall,
and if one green bottle was to accidentally fall,
there would be 2 green bottles standing on the wall;
</Paragraph>
<Paragraph>
2 green bottles standing on the wall,
2 green bottles standing on the wall,
and if one green bottle was to accidentally fall,
<InlineUIContainer>
<Button>This Button is inline</Button>
</InlineUIContainer>
there would be 1 green bottle standing on the wall...
</Paragraph>
</FlowDocument>
</FlowDocumentScrollViewer>
Вы можете заменить Button
на свои собственные элементы управления (например, встроенную кнопку со своей сноской)
Этот код делает это:
Надеюсь, это поможет! Я не знаю точно, что вы пытаетесь сделать, но я думаю, что вы все равно можете использовать FlowDocument
и просто использовать большое количество оборудования для работы с текстом, поставляемого с WPF, и если вам нужны дополнительные функции / опции макета, создайте новый унаследуйте класс Block
или Inline
или что-то еще и напишите дополнительный материал, чтобы воспользоваться всеми преимуществами работы .net.
Если вам нужна дополнительная информация, вы можете прочитать больше о текстовых материалах в WPF на MSDN:
Очень длинная статья о том, как использовать FlowDocument
Модель текстового содержимого, используемая в WPF (откуда я получил изображение)
Наслаждайся собой:)