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はDependencyプロパティではないので、バインドはありません。

私はこのTextBoxに出くわしました:ここで、しかし、それをバインドできるかどうか、そしてどのようにバインドできるかはわかりません。この時点で、wpfはHierachicalDataTemplateを認識していないようです。wpfに同期を機能させる方法はありますか?

4

1 に答える 1

1

やっと解決しました。問題は次のとおりです。WPFではDataBindingを使用する可能性がないため、「onTextElementChanged」とtext.Selection.Start.Parentを使用して、カーソルが入っていた実行を受信しました。マップしたい対応するデータ構造が保存されました。 「タグ」内-親段落のプロパティ。私はそれがかなり醜い解決策であることを知っています、しかしそれはきちんと働いた唯一のものでした。

何かが変更された場合、RTBが変更を書き戻すためにランダムに分割するため、複数の実行を連結する必要がありました。だから私はそれを保存するために段落を取りました。

他の方向は、WPFが提示するのと同じように、PropertyChangedイベントをリッスンすることで解決できます。

まだ解決できない最大の問題は、RTBの元に戻す機能です。より複雑なデータ構造を構築する必要があったため、いくつかのUserControlsとInlineUIContainerを使用しました。それらの1つを削除すると(たとえば、「entf」を押すことによって)、プログラムはStackOverflowExceptionでクラッシュします。これは「文書化されていない機能」またはWPFのバグであり、Microsoftはわざわざ修正することはありません。

于 2012-11-09T10:36:02.003 に答える