Поведение WPF Richtextbox XamlWriter
Я пытаюсь сохранить исходный код C# в базу данных. По сути, у меня есть RichTextBox, который пользователи могут вводить свой код и сохранять его в базе данных.
Когда я копирую и вставляю из среды Visual Studio, я хотел бы сохранить форматирование и т. Д. Поэтому я решил сохранить FlowDocuments Xaml в базе данных и установить его обратно в RichTextBox.Document.
Мои ниже две функции сериализуют и десериализуют содержимое 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;
}
Однако когда я пытаюсь сериализовать и десериализовать следующий код, я замечаю это неправильное (?) Поведение
using System;
public class TestCSScript : MarshalByRefObject
{
}
Сериализованный XAML
using
System;
public
class TestCSScript :
MarshalByRefObject
{}{
}
Обратите внимание на новый набор "{}"
Что я тут не так делаю... Заранее спасибо за помощь!
1 ответ
Пока я отказался от запоздалого решения, но если кто-то из вас найдет чистое решение, пожалуйста, опубликуйте его.
Я использовал вызов Replace Stringbuilder для удаления нежелательных символов.
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();
}
}
У меня есть ощущение, что когда xamlwriter встречает символ "{" - он интерпретирует это как выражение привязки. Интересно, какова последовательность побега для этого персонажа.
Примечание. Я попытался изменить
XamlWriterMode from XamlWriterMode.Expression to XamlWriterMode.Value
без радости