WPF RichTextBox سلوك XamlWriter
-
26-09-2019 - |
سؤال
أحاول حفظ بعض التعليمات البرمجية المصدر C# في قاعدة البيانات. في الأساس ، لديّ مربع RichText يمكن للمستخدمين كتابة التعليمات البرمجية الخاصة بهم وحفظه في قاعدة البيانات.
عندما أقوم بنسخ وألصق من بيئة Visual Studio ، أود الحفاظ على التكوين وما إلى ذلك. لذلك اخترت حفظ FlowDocuments XAML إلى قاعدة البيانات وتعيين هذا مرة أخرى إلى RichTextBox.document.
بلدي أدناه وظيفتين تسلسل و deverialise محتويات 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
{}{
}
لاحظ المجموعة الجديدة من "{}"
ما الخطأ الذي أفعله هنا ... شكرًا مقدمًا على المساعدة!
المحلول
لقد استقلت من حل متأخر في الوقت الحالي ، ولكن إذا وجد أي منكم حلًا نظيفًا ، فيرجى نشره.
لقد استخدمت استدعاء Call of 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
بدون فرح.