XamlWriter和XamlReader与基于流的图像?

时间:2016-05-27 06:07:06

标签: wpf xaml .net-4.5.2

我使用以下代码动态创建图像:

Public Function ToBitmapImage(byteArray As Byte()) As BitmapImage
    Dim image As New BitmapImage()
    Dim stream As New MemoryStream(byteArray)
    image.BeginInit()
    image.StreamSource = stream
    image.EndInit()
    image.Freeze()
    Return image
End Function

然后我尝试使用以下代码克隆包含图像的其中一个对象:

Public Function Clone(Of T As DependencyObject)(orginal As T) As T
    If (orginal Is Nothing) Then
        Return Nothing
    End If

    Using stream As New MemoryStream()
        XamlWriter.Save(orginal, stream)
        stream.Position = 0
        Return CType(XamlReader.Load(stream), T)
    End Using
End Function

图像序列化为:

...xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation"...
<av:Image ...>
    <av:Image.Source>
        <av:BitmapImage BaseUri="{x:Null}" />
    </av:Image.Source>
</av:Image>

BaseUri="{x:Null}"导致Initialization of 'System.Windows.Media.Imaging.BitmapImage' threw an exception. rownumber 1 row position xxx. 有没有办法强制它如此序列化BitmapImage中的数据而不是baseUrl?

1 个答案:

答案 0 :(得分:0)

我找到了一个丑陋的解决方案,而不是使用image.StreamSource = stream我将它们写入临时文件并将BaseUriUriSource设置为文件位置。

这意味着我必须在完成这些文件时删除这些文件,所以如果有更好的解决方案,我感兴趣!