WPF RichTextBox Xamlwriter Comportamento
-
26-09-2019 - |
Pergunta
Estou tentando salvar algum código -fonte C# no banco de dados. Basicamente, eu tenho uma caixa richtext que os usuários podem digitar seu código e salvá -lo no banco de dados.
Quando copio e colo do ambiente do Visual Studio, gostaria de preservar a formação etc., então escolhi salvar os documentos de fluxo XAML no banco de dados e coloque -o de volta ao richtextbox.document.
Minhas duas funções abaixo serializam e desserializam o conteúdo do 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;
}
No entanto, quando tento serializar e desfazer o código a seguir, estou percebendo esse comportamento incorreto (?)
using System;
public class TestCSScript : MarshalByRefObject
{
}
Xaml serializado é
using
System;
public
class TestCSScript :
MarshalByRefObject
{}{
}
Observe o novo conjunto de "{}"
O que estou fazendo de errado aqui ... Agradecemos antecipadamente pela ajuda!
Solução
Eu me demiti a uma solução tardia por enquanto, mas se algum de vocês encontrar um limpo, poste -o.
Eu usei uma chamada de substituição do StringBuilder para remover os caracteres indesejados.
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();
}
}
Tenho a sensação de que, quando o Xamlwriter encontra "{" personagem - intrapreende isso como uma expressão de ligação. Eu me pergunto qual é a sequência de fuga para esse personagem.
Nota - eu tentei mudar o
XamlWriterMode from XamlWriterMode.Expression to XamlWriterMode.Value
sem alegria.