Estoy construyendo una aplicación que necesita permitirle a un usuario insertar texto de un RichTextBox
en la posición actual del cursor en otro. Me pasé un montón de tiempo de joder con el modelo de objetos FlowDocument
's antes de ejecutar a través de esta técnica - source
y target
son ambos FlowDocument
s:¿Cómo insertar contenido en línea de un FlowDocument en otro?
using (MemoryStream ms = new MemoryStream())
{
TextRange tr = new TextRange(source.ContentStart, source.ContentEnd);
tr.Save(ms, DataFormats.Xaml);
ms.Seek(0, SeekOrigin.Begin);
tr = new TextRange(target.CaretPosition, target.CaretPosition);
tr.Load(ms, DataFormats.Xaml);
}
Esto funciona muy bien.
El único problema que tengo ahora es que siempre inserta la fuente como un nuevo párrafo. Rompe la ejecución actual (o lo que sea) en el símbolo de intercalación, inserta la fuente y finaliza el párrafo. Eso es apropiado si la fuente realmente es un párrafo (o más de un párrafo), pero no si es simplemente (por ejemplo) una línea de texto.
Creo que es probable que la respuesta a esto vaya a ser comprobar el objetivo para ver si se trata de un solo bloque, y si lo hace, configurar el TextRange
para apuntar al principio y al final del bloquear el contenido antes de guardarlo en la secuencia.
El mundo entero del FlowDocument
es un mar de misterios oscuros para mí. Puedo convertirme en un experto si tengo que hacerlo (según Dostoievski: "El hombre es el animal que se puede acostumbrar a todo"), pero si alguien ya lo ha descubierto y puede decirme cómo hacerlo, haría que mi la vida es mucho más fácil.
Va a ser un tiempo antes de que realmente puede ir y comprobar esto para la corrección, pero seguro que parece como si hubiera estado exactamente donde estoy ahora, y aprecio la información. –