WPF Flowdocument "cambio de caso" característica

Estoy implementando una funcionalidad de "cambio de caso" para mi palabra similar a RichTextBox con Shift + F3. Todo lo que hace es cambiar entre mayúsculas y minúsculas> mayúsculas y minúsculas, lo cual es muy simple una vez que tengo acceso a la cadena que necesito.

Mi pregunta es, cómo cambiar (y encontrarlo en primer lugar) una cadena en flowdocument sin perder ningún elemento incrustado (perder formato no es un problema) que pueda estar contenido dentro de la cadena. Igual que la palabra, necesito esta funcionalidad para 2 casos:

1) Texto seleccionado por el ratón. Lo intenté simplemente

<code>this.Selection.Text = newText;
</code>

Pero eso, por supuesto, perdió mis elementos incrustados.

2) La última palabra antes de la posición de intercalación. Cualquier elemento que no sea de texto es un delimitador de palabras, sin embargo una palabra puede ser

<code>"He<weird formatting begin>ll<weird formatting end>o".
</code>

Respuestas a la pregunta(1)

Su respuesta a la pregunta