将usercontrol重新添加到主页面后生成PrintPreview

时间:2017-04-19 05:47:34

标签: printing uwp uwp-xaml

今天,我在打印uwp应用程序时遇到了一个新问题,如果我删除然后再将我的usercontrol添加到主页面中,则无法生成打印预览。

我的场景:我有一个用户控件,其中我有一个列表框,其项目是水平对齐的,但我想以垂直方式打印这些项目(每页2个项目)。

所以,我创建了另一个带有垂直对齐项目的同一个列表框,最初隐藏了这个列表框,然后在创建预览时,这个列表框会显示一段时间。

现在,问题是第一次运行我的应用程序然后它就像一个魅力,然后删除相同的用户控件并再次添加它是为我创建一个问题,无法生成打印预览。 / p>

我创建了一个复制此问题的精简样本。

重现的步骤:

  1. 运行该应用程序。

  2. 点击"加载联系人"按钮

  3. 点击"打印"按钮

  4. 观察:打开打印对话框并创建打印预览 - 正确

    1. 现在,取消打印过程以隐藏打印对话框

    2. 点击"清除"按钮删除用户控件

    3. 现在,重复步骤1到3

    4. 观察:这次,未创建打印预览----不正确

      演示示例链接:https://1drv.ms/u/s!AiCx3o82H3zN9XD8iNCnaUmHUpzI

1 个答案:

答案 0 :(得分:1)

在Unloaded事件中,当您将null设置为PrintManager时,无法从中删除PrintManager.PrintTaskRequested事件。它会将" Delegate抛给一个实例方法,不能为null'这个'。"

在将PrintManager设置为null之前,您应该能够删除PrintManager.PrintTaskRequested事件。

例如:

private void ContactsUserControl_Unloaded(object sender, RoutedEventArgs e)
{
    try
    {
        printMan.PrintTaskRequested -= PrintTaskRequested;
        printMan = null;
        printDocSource = null;
        printDoc.Paginate -= Paginate;
        printDoc.GetPreviewPage -= GetPreviewPage;
        printDoc.AddPages -= PrintDoc_AddPages;
        printDoc = null;
        GC.Collect();
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex.Message);
    }
}