我使用的是一个非常简单的树形结构:
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进行同步工作?
答案 0 :(得分:1)
我终于解决了它。问题是:WPF没有给我任何使用DataBinding的可能性,所以我写了一下使用“onTextElementChanged”和text.Selection.Start.Parent来接收游标所在的运行。 我希望Map的相应Datastructure存储在父段落的“Tag”属性中。我知道这是一个非常难看的解决方案,但它是唯一一个正常工作的解决方案。
如果发生了变化,我必须连续多次运行,因为RTB会随机拆分它们以便将更改写回来。这就是为什么我把段落存储起来的原因。
可以通过收听PropertyChanged事件来解决另一个方向,就像WPF向您展示一样。
最大的仍无法解决的问题是RTB的撤消功能。因为我必须构建一个更复杂的数据结构,所以我使用了一些UserControls和InlineUIContainer。如果你删除其中一个(例如通过按“entf”),程序崩溃与StackOverflowException。它是WPF中的“未记录的功能”或错误,微软并不打算修复它。