如何创建类Inline的子类? (FlowDocument中使用的那个)

时间:2011-04-27 01:01:54

标签: .net wpf custom-controls richtextbox flowdocument

在WPF中,我想创建自定义Inline实现。来自Inline的文档:“为所有内联流内容元素提供基础的抽象类。” FigureRunSpan等类继承自Inline

我从Inline继承的自定义类将类似于'2 lined Run'。我对文档流程有特殊需求,这似乎是唯一的方法。但是我不知道从哪里开始: Inline没有定义任何成员!它是抽象类所以它是继承的,但没有文档关于如何从中继承。不在MSDN中,在其他地方我找不到它。

如果您可以提供一些在线资源(教程/博客/文章)或代码示例如何创建Inline的子类。例如,只是一些宽度和高度的空盒子。

如果您想知道我为什么要创建自定义Inline元素,请查看问题Create guitar chords editor in WPF

1 个答案:

答案 0 :(得分:2)

基类可仅用于添加类型保真度的目的。例如,FlowDocument处理器中的代码可能只想执行以下代码:

if(currentElement is Inline)
{
   // Do something
}

Inline实际上根本不需要做任何事情。

就Inline的子类化而言,我认为你可能无法达到你想要的效果。我的理解是FlowDocument渲染器负责查看元素的类型并解释它们的类型及其属性的行为方式。换句话说,它不了解您的自定义代码。我认为你能做的最好的事情就是从一个有用的元素中继承子类,让你的子类混乱属性值或任何可覆盖的东西。

您也可以添加附加属性并处理定义这些属性的子元素。例如,如果您希望超链接容器允许不同的子元素提供不同的链接,您可以从Hyperlink子类化,定义新的链接附加属性,并以不同于Hyperlink本身的方式处理子项的单击事件。

您可能也可以通过InlineUIContainer和BlockUIContainer元素取得一些成功,它们允许您在其中嵌入任何UIElement,包括自定义UIElements。