使用wpf中的自定义TextElements扩展FlowDocument

时间:2010-08-12 14:42:57

标签: wpf

我想通过创建自己的Span和Run衍生产品来扩展FlowDocument的功能。

这可能,有没有人找到任何例子?

2 个答案:

答案 0 :(得分:2)

Microsoft没有公开在其中一个文档类中呈现自定义TextElement所需的方法。如果您查看RunSpan的代码,则没有实际的渲染代码。渲染发生在由各种内部类(如FixedTextBuilder)构建的UIElement中。

来自MSDN关于FrameworkContentElement的说明:

  

FrameworkContentElement尚未定义自己的渲染行为;可以在代码或标记中实例化实际的FrameworkContentElement类实例,但在WPF应用程序用户界面(UI)中不显示任何内容。渲染逻辑必须由将FrameworkContentElement子元素作为其内容模型的一部分的类或FrameworkContentElement派生类中的类提供。

所有内容都不会丢失,通过BlockUIContainerInlineUIContainer类提供对呈现自定义Block和Inline元素的支持。然后,您可以创建一个低级UIElement,它将托管在fixed文件或流文档中,或者使用更高级别的WPF元素。

答案 1 :(得分:1)

需要什么样的可扩展性?通常,当涉及到更改任何WPF控件的默认行为时,无法通过继承更改,我们使用Attached Properties

Span元素的

Here is an example,绑定到项目集合。附加属性的相同技巧有助于将Run绑定到文本。

答案还取决于FlowDocument使用情况。如果它处于只读模式,则BlockUIContainerInlineUIContainer类是您的朋友。但如果FlowDocument位于RichTextBox内,你会讨厌并诅咒它们(复制/粘贴,撤消/重做等问题)以及整个WPF文本支持基础架构。