Me gustaría extender la funcionalidad de FlowDocument creando mis propias derivadas de Span y Run.Extendiendo un FlowDocument con TextElements personalizados en wpf
¿Es esto posible y nadie ha encontrado algunos ejemplos?
Me gustaría extender la funcionalidad de FlowDocument creando mis propias derivadas de Span y Run.Extendiendo un FlowDocument con TextElements personalizados en wpf
¿Es esto posible y nadie ha encontrado algunos ejemplos?
Microsoft no expone los métodos necesarios para representar un TextElement personalizado dentro de una de sus clases de documentos. Si observa el código de Run o Span, no hay un código de representación real. La representación se lleva a cabo en UIElement, construido por varias clases internas (como FixedTextBuilder).
De las notas de MSDN en FrameworkContentElement:
FrameworkContentElement aún no define su propio comportamiento de representación; la instancia de una instancia de clase FrameworkContentElement real en código o marcado es posible pero no muestra nada en una interfaz de usuario (UI) de la aplicación WPF. La lógica de representación debe ser proporcionada por las clases que toman elementos secundarios de FrameworkContentElement como parte de su modelo de contenido, o en las clases derivadas de FrameworkContentElement.
no todo está perdido, el apoyo a la prestación de bloque personalizado y Los elementos en línea se proporciona a través de las clases y BlockUIContainerInlineUIContainer. A continuación, puede crear un UIElement de bajo nivel que se alojaría dentro del documento fijo o de flujo, o utilizar elementos WPF de mayor nivel.
¿Qué tipo de extensibilidad se requiere? Por lo general, cuando se trata de cambiar el comportamiento predeterminado de cualquier control de WPF, que no se pudo cambiar a través de la herencia, utilizamos Attached Properties.
Here is an example del elemento Span
, que está destinado a la colección de elementos. El mismo truco con las propiedades adjuntas ayuda a vincular Run
a un texto.
La respuesta también dependerá del contexto de uso FlowDocument
. Si está en modo de solo lectura, las clases BlockUIContainer y InlineUIContainer son tus amigos. Pero si FlowDocument
está dentro de RichTextBox
, los odiará y los maldecirá (problemas con copiar/pegar, deshacer/rehacer, etc.) junto con toda la infraestructura de soporte de texto de WPF.
estoy tratando de aplicar el patrón MVVM-para un FlowDocument. Podría lograr un TextBox con DataBinding pero tengo problemas con un BlockUIContainer ... – DrMarbuse