comportamento WPF RichTextBox XamlWriter
-
26-09-2019 - |
Domanda
sto cercando di risparmiare un po 'C # codice sorgente nel database. Fondamentalmente ho un RichTextBox che gli utenti possono digitare il proprio codice e Salva che al database.
Quando Copio e incollo dall'ambiente di Visual Studio, vorrei conservare la formattazione ecc Così ho scelto di salvare il FlowDocuments Xaml al database e impostare questo ritorno al RichTextBox.Document.
Il mio seguito due funzioni serialise e deserialise contenuto della RTB.
private string GetXaml(FlowDocument document)
{
if (document == null) return String.Empty;
else{
StringBuilder sb = new StringBuilder();
XmlWriter xw = XmlWriter.Create(sb);
XamlDesignerSerializationManager sm = new XamlDesignerSerializationManager(xw);
sm.XamlWriterMode = XamlWriterMode.Expression;
XamlWriter.Save(document, sm );
return sb.ToString();
}
}
private FlowDocument GetFlowDocument(string xamlText)
{
var flowDocument = new FlowDocument();
if (xamlText != null) flowDocument = (FlowDocument)XamlReader.Parse(xamlText);
// Set return value
return flowDocument;
}
Tuttavia quando provo a serialise e deserialise il seguente codice, sto notando questo comportamento non corretto (?)
using System;
public class TestCSScript : MarshalByRefObject
{
}
Serialized XAML è
using
System;
public
class TestCSScript :
MarshalByRefObject
{}{
}
Si noti la nuova serie di "{}"
Che cosa sto facendo male qui ... Grazie in anticipo per l'aiuto!
Soluzione
Mi sono dimesso a una soluzione tardiva per ora, ma se qualcuno di voi trova uno pulito, si prega di postare.
Ho usato una chiamata Sostituire di StringBuilder per rimuovere i caratteri indesiderati.
private string GetXaml(FlowDocument document)
{
if (document == null) return String.Empty;
else
{
StringBuilder sb = new StringBuilder();
using (XmlWriter xw = XmlWriter.Create(sb))
{
XamlDesignerSerializationManager sm = new XamlDesignerSerializationManager(xw);
sm.XamlWriterMode = XamlWriterMode.Expression;
XamlWriter.Save(document, sm);
}
sb.Replace("{}", "");
return sb.ToString();
}
}
ho la sensazione che, quando gli incontri xamlwriter "{" personaggio - è intreprets che come espressione vincolante. Mi chiedo che cosa la sequenza di escape è per questo personaggio.
Nota - Ho provato a cambiare il
XamlWriterMode from XamlWriterMode.Expression to XamlWriterMode.Value
senza la gioia.