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

Printing 将usercontrol重新添加到主页面后生成PrintPreview,printing,uwp,uwp-xaml,Printing,Uwp,Uwp Xaml,今天,我在打印uwp应用程序时遇到了一个新问题,即如果我删除并再次将usercontrol添加到主页中,则无法生成打印预览 我的场景:我有一个用户控件,其中有一个列表框,列表框中的项目是水平对齐的,但我希望以垂直方式每页打印两个项目 因此,我创建了另一个具有垂直对齐项的相同列表框,最初该列表框是隐藏的,然后在创建预览时,该列表框会显示一段时间 现在,这个问题是我第一次运行我的应用程序,然后它像一个魔咒一样工作,然后删除同一个usercontrol并再次添加它,这给我带来了一个问题,无法生成打印预

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

我的场景:我有一个用户控件,其中有一个列表框,列表框中的项目是水平对齐的,但我希望以垂直方式每页打印两个项目

因此,我创建了另一个具有垂直对齐项的相同列表框,最初该列表框是隐藏的,然后在创建预览时,该列表框会显示一段时间

现在,这个问题是我第一次运行我的应用程序,然后它像一个魔咒一样工作,然后删除同一个usercontrol并再次添加它,这给我带来了一个问题,无法生成打印预览

我已经创建了一个复制此问题的精简示例

复制步骤:

运行应用程序

单击“加载联系人”按钮

点击打印按钮

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

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

单击“清除”按钮以删除usercontrol

现在,重复从1到3的步骤

注意:这一次,打印预览没有创建错误


演示示例链接:

在卸载事件中,当您将PrintManager设置为null时,您无法从中删除PrintManager.PrintTaskRequested事件。它将委托给实例方法,实例方法不能有null“this”

在将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);
    }
}
请阅读-总结是,这不是一个理想的方式来解决志愿者,可能会适得其反获得答案。请不要将此添加到您的问题中。