我想通过创建自己的Span和Run衍生产品来扩展FlowDocument的功能。
这可能,有没有人找到任何例子?
答案 0 :(得分:2)
Microsoft没有公开在其中一个文档类中呈现自定义TextElement所需的方法。如果您查看Run或Span的代码,则没有实际的渲染代码。渲染发生在由各种内部类(如FixedTextBuilder)构建的UIElement中。
来自MSDN关于FrameworkContentElement的说明:
FrameworkContentElement尚未定义自己的渲染行为;可以在代码或标记中实例化实际的FrameworkContentElement类实例,但在WPF应用程序用户界面(UI)中不显示任何内容。渲染逻辑必须由将FrameworkContentElement子元素作为其内容模型的一部分的类或FrameworkContentElement派生类中的类提供。
所有内容都不会丢失,通过BlockUIContainer和InlineUIContainer类提供对呈现自定义Block和Inline元素的支持。然后,您可以创建一个低级UIElement,它将托管在fixed文件或流文档中,或者使用更高级别的WPF元素。
答案 1 :(得分:1)
需要什么样的可扩展性?通常,当涉及到更改任何WPF控件的默认行为时,无法通过继承更改,我们使用Attached Properties。
Span
元素的 Here is an example,绑定到项目集合。附加属性的相同技巧有助于将Run
绑定到文本。
答案还取决于FlowDocument
使用情况。如果它处于只读模式,则BlockUIContainer和InlineUIContainer类是您的朋友。但如果FlowDocument
位于RichTextBox
内,你会讨厌并诅咒它们(复制/粘贴,撤消/重做等问题)以及整个WPF文本支持基础架构。