C# 打印包含图像的WPF可视文件

C# 打印包含图像的WPF可视文件,c#,wpf,printing,C#,Wpf,Printing,我试图打印一个WPF视觉(确切地说是画布)包含多个图像。图像源从转换为BitmapSources的base64字符串加载。当画布显示在窗口中时,两幅图像正确显示,但当使用PrintDialog的PrintVisual方法打印时,两幅图像显示相同。我创建了一个缩小的示例,展示了我看到的行为 以下是我正在使用的XAML: <Window x:Class="ImagePrintTest.MainWindow" xmlns="http://schemas.microsoft.com/win

我试图打印一个WPF视觉(确切地说是画布)包含多个图像。图像源从转换为BitmapSources的base64字符串加载。当画布显示在窗口中时,两幅图像正确显示,但当使用PrintDialog的PrintVisual方法打印时,两幅图像显示相同。我创建了一个缩小的示例,展示了我看到的行为

以下是我正在使用的XAML:

<Window x:Class="ImagePrintTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:ImagePrintTest"
    mc:Ignorable="d"
    Title="MainWindow" Height="800" Width="600">
<StackPanel>
    <Button Content="Print" Click="Button_Click" />
    <Canvas x:Name="ImageCanvas">
        <Image x:Name="ImageA" Canvas.Left="50" Canvas.Top="50" Width="380" Height="56" />
        <Image x:Name="ImageB" Canvas.Left="50" Canvas.Top="150" Width="380" Height="56" />
    </Canvas>
</StackPanel>

我假设图像源被缓存在某个地方,但我真的无法解释这种行为。有人能解释一下这里发生了什么吗?

当我创建第二个位图帧时,它对我很有用,如下所示:

public static BitmapSource Convert(string s)
{
    using (var ms = new MemoryStream(System.Convert.FromBase64String(s)))
    {
        return BitmapFrame.Create(
            BitmapFrame.Create(ms, BitmapCreateOptions.None, BitmapCacheOption.OnLoad));
    }
}
然而,我无法解释这种行为


我还注意到,印刷似乎破坏了布局。打印后,ImageCanvas将移动到StackPanel父级中的位置(0,0)。

这似乎解决了我的问题。谢谢
public static BitmapSource Convert(string s)
{
    using (var ms = new MemoryStream(System.Convert.FromBase64String(s)))
    {
        return BitmapFrame.Create(
            BitmapFrame.Create(ms, BitmapCreateOptions.None, BitmapCacheOption.OnLoad));
    }
}