Расширение FlowDocument с помощью пользовательских TextElements в wpf - PullRequest
6 голосов
/ 12 августа 2010

Я бы хотел расширить функциональность FlowDocument, создав собственные производные Span и Run.

Возможно ли это, и кто-нибудь нашел примеры?

Ответы [ 2 ]

2 голосов
/ 03 сентября 2010

Microsoft не предоставила методы, необходимые для визуализации пользовательского TextElement внутри одного из своих классов документов.Если вы посмотрите на код для Run или Span , то фактического кода рендеринга не будет.Рендеринг выполняется в UIElement , созданных различными внутренними классами (например, FixedTextBuilder).

Из заметок MSDN по FrameworkContentElement :

FrameworkContentElement еще не определяет свое собственное поведение рендеринга;создание экземпляра фактического экземпляра класса FrameworkContentElement в коде или разметке возможно, но ничего не отображается в пользовательском интерфейсе приложения WPF.Логика рендеринга должна обеспечиваться классами, которые принимают дочерние элементы FrameworkContentElement как часть своей модели содержимого или в производных классах FrameworkContentElement.

Не все потеряно, поддержка рендеринга пользовательских элементов Block и Inline обеспечивается посредствомклассы BlockUIContainer и InlineUIContainer .Затем вы можете создать UIElement низкого уровня, который будет размещен внутри фиксированного или потокового документа, или использовать элементы WPF более высокого уровня.

1 голос
/ 06 сентября 2010

Какая расширяемость требуется?Обычно, когда речь идет об изменении поведения по умолчанию любого элемента управления WPF, которое нельзя изменить с помощью наследования, мы используем Attached Properties .

Вот пример элемента Span, который связан с коллекцией предметов.Тот же трюк с прикрепленными свойствами помогает связать Run с текстом.

Ответ также будет зависеть от контекста использования FlowDocument.Если он находится в режиме только для чтения, ваши друзья будут BlockUIContainer и InlineUIContainer .Но если FlowDocument находится внутри RichTextBox, вы будете ненавидеть и проклинать их (проблемы с копированием / вставкой, отменой / повторением и т. Д.) Вместе со всей инфраструктурой поддержки текста WPF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...