1

我正在使用一个非常简单的树结构:

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 进行我的同步工作吗?

4

1 回答 1

1

我终于有点解决了。问题是:WPF 没有给我任何使用 DataBinding 的可能性,所以我写了使用“onTextElementChanged”和 text.Selection.Start.Parent 来接收光标所在的运行。我想要映射的相应数据结构已存储在父段落的“标签”-属性中。我知道这是一个非常丑陋的解决方案,但它是唯一一个正常工作的解决方案。

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

另一个方向可以通过侦听 PropertyChanged 事件来解决,就像 WPF 呈现给您一样。

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

于 2012-11-09T10:36:02.003 回答