2012-10-10 221 views
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让我的同步工作?

回答

1

我终于样的解决了这个问题。问题是:WPF不给我使用数据绑定任何的可能性,所以我写了,周围用“onTextElementChanged”和text.Selection.Start.Parent到收到运行光标在 我相应的数据结构网络化我想地图中。存储在父段的“标签”属性中。我知道这是一个相当丑陋的解决方案,但它是唯一一个正常工作的人。

如果有新的变化,我不得不concatinate多次运行,由于该RTB随机分裂他们写更改回。那就是为什么我拿这段落来存储它。

其他方向可以通过听的PropertyChanged事件,就像WPF呈现给你解决。

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