Richtextbox中的树结构

时间:2012-10-10 06:45:20

标签: wpf tree richtextbox

我使用的是一个非常简单的树形结构:

class Tree { }
class Node : Tree {
    public List <Tree> Children;
}
class Leave : Tree {
    public string Content;
}

我想在WPF中显示它 - RichTextBox,结果看起来像那样,但绑定到我的树:

<FlowDocument>
  <Section>
    <Paragraph>
      TEXT_FOOTER
    </Paragraph>
  </Section>
</FlowDocument>

只有树的叶子在段落中显示其内容,而节点显示在一个部分中。

目前我正在以编程方式解决这个问题,但是为了让RTB与我的树同步,这是一项艰巨的工作。 有没有办法将这样的结构绑定到Box,我知道Document-Property不是依赖属性,所以没有绑定。

我来到了这个TextBox:Here,但我不知道如果我能绑定它,wpf在这一点上似乎不知道HierachicalDataTemplate。 有没有办法让wpf进行同步工作?

1 个答案:

答案 0 :(得分:1)

我终于解决了它。问题是:WPF没有给我任何使用DataBinding的可能性,所以我写了一下使用“onTextElementChanged”和text.Selection.Start.Parent来接收游标所在的运行。 我希望Map的相应Datastructure存储在父段落的“Tag”属性中。我知道这是一个非常难看的解决方案,但它是唯一一个正常工作的解决方案。

如果发生了变化,我必须连续多次运行,因为RTB会随机拆分它们以便将更改写回来。这就是为什么我把段落存储起来的原因。

可以通过收听PropertyChanged事件来解决另一个方向,就像WPF向您展示一样。

最大的仍无法解决的问题是RTB的撤消功能。因为我必须构建一个更复杂的数据结构,所以我使用了一些UserControls和InlineUIContainer。如果你删除其中一个(例如通过按“entf”),程序崩溃与StackOverflowException。它是WPF中的“未记录的功能”或错误,微软并不打算修复它。