2010-08-12 9 views

Antwort

1

Microsoft hat die Methoden, die zum Rendern einer benutzerdefinierten TextElement innerhalb einer ihrer Dokumentklassen erforderlich sind, nicht verfügbar gemacht. Wenn Sie den Code für eine Run oder Span betrachten, gibt es keinen tatsächlichen Rendering-Code. Das Rendering findet in UIElement statt, die von verschiedenen internen Klassen (wie FixedTextBuilder) erstellt werden.

Aus Notizen des MSDN auf FrameworkContentElement:

Framework noch nicht sein eigenes Rendering-Verhalten definieren; Das Instanziieren einer tatsächlichen FrameworkContentElement-Klasseninstanz in Code oder Markup ist möglich, zeigt jedoch nichts in einer WPF-Anwendungsbenutzeroberfläche an. Die Rendering-Logik muss von Klassen bereitgestellt werden, die untergeordnete FrameworkContentElement-Elemente als Teil ihres Inhaltsmodells oder in von FrameworkContentElement abgeleiteten Klassen verwenden.

nicht alles verloren ist, Unterstützung für die Darstellung von benutzerdefinierten Block- und Inline-Elemente wird durch die BlockUIContainer und InlineUIContainer Klassen zur Verfügung gestellt. Sie könnten dann ein UIElement auf niedriger Ebene erstellen, das innerhalb des Fixed- oder Flow-Dokuments gehostet wird, oder Sie können WPF-Elemente auf höherer Ebene verwenden.

+0

Ich versuche das MVVM-Muster für ein Fließdokument anzuwenden. Ich könnte eine TextBox mit DataBinding erstellen, habe aber Probleme mit einem BlockUIContainer ... – DrMarbuse

1

Welche Erweiterbarkeit ist erforderlich? Wenn es darum geht, das Standardverhalten eines WPF-Steuerelements zu ändern, das nicht durch Vererbung geändert werden kann, verwenden wir normalerweise Attached Properties.

Here is an example von Span Element, das an die Sammlung von Elementen gebunden ist. Derselbe Trick mit angehängten Eigenschaften hilft beim Binden von Run an einen Text.

Die Antwort hängt auch vom FlowDocument Nutzungskontext ab. Wenn es im schreibgeschützten Modus ist, sind BlockUIContainer und InlineUIContainer Klassen Ihre Freunde. Aber wenn FlowDocument in RichTextBox ist, werden Sie sie hassen und verfluchen (Probleme mit Kopieren/Einfügen, Undo/Redo, etc.) zusammen mit der gesamten WPF-Text-Support-Infrastruktur.

Verwandte Themen