I have an experimental WPF probject like Microsoft Word. The main component is RichTextBox
. Users can edit the content and save it to somewhere. The below methods are used in serializing and deserializing the content to/from a remote database.
public static byte[] FlowDocumentSerializingV2WithXamlWriter(FlowDocument flowDocument) {
using(MemoryStream buffer = new MemoryStream()) {
XamlWriter.Save(flowDocument, buffer);
return buffer.ToArray();
}
}
I serialize RichTextBox.Document
using the above method. This method returns a byte[]
. I save the byte[]
result to a remote database. Later, we can read this byte[]
data from the remote database and then load it into the RichTextBox
using below method.
public FlowDocument FlowDocumentDeserializingV2WithXamlLoader(byte[] data) {
MemoryStream ms = new MemoryStream(data);
return (FlowDocument)XamlReader.Load(ms);
}
If there is no image in the FlowDocument
, the above methods work very well. The problem is that when any picture is pasted in the FlowDocument
, FlowDocumentDeserializingV2WithXamlLoader(byte[] data)
will throw an exception on the line return (FlowDocument)XamlReader.Load(ms)
. The exception is:
System.Windows.Markup.XamlParseException
HResult=0x80131501
Message='Initialization of 'System.Windows.Media.Imaging.BitmapImage' threw an exception.' Line number '1' and line position '123355'.
Source=PresentationFramework
StackTrace: at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)This exception was originally thrown at this call stack:
System.Net.WebRequest.Create(System.Uri, bool) MS.Internal.WpfWebRequestHelper.CreateRequest(System.Uri) System.IO.Packaging.PackWebRequest.GetRequest(bool) System.IO.Packaging.PackWebRequest.GetResponse() MS.Internal.WpfWebRequestHelper.GetResponse(System.Net.WebRequest) System.Windows.Media.Imaging.BitmapDecoder.SetupDecoderFromUriOrStream(System.Uri, System.IO.Stream, System.Windows.Media.Imaging.BitmapCacheOption, out System.Guid, out bool, out System.IO.Stream, out System.IO.UnmanagedMemoryStream, out Microsoft.Win32.SafeHandles.SafeFileHandle) System.Windows.Media.Imaging.BitmapDecoder.CreateFromUriOrStream(System.Uri, System.Uri, System.IO.Stream, System.Windows.Media.Imaging.BitmapCreateOptions, System.Windows.Media.Imaging.BitmapCacheOption, System.Net.Cache.RequestCachePolicy, bool) System.Windows.Media.Imaging.BitmapImage.FinalizeCreation() System.Windows.Media.Imaging.BitmapImage.EndInit() MS.Internal.Xaml.Runtime.ClrObjectRuntime.InitializationGuard(System.Xaml.XamlType, object, bool)
Inner Exception 1:
NotSupportedException: The URI prefix is not recognized.
I don't know how to fix this problem. Can anybody help me? Any help is appreciating.
I have created a project to demonstrate this issue in Github: https://github.com/apchee/richtextbox
The images in readme.md
is not showing, but it should be shown in local computer.
User contributions licensed under CC BY-SA 3.0