从重新承载的设计器打印 .NET WF4 工作流

本文关键字:打印 NET WF4 工作流 新承载 | 更新日期: 2023-09-27 17:55:32

我想从 .NET 4.5 重新托管的工作流设计器中打印漂亮的工作流呈现。打印 WPF 控件的标准技术不起作用 - 可以看到工作流设计器本身的环境,但工作流呈现保持空白。

在下面的示例中,我从另一个工作流设计器中获取工作流定义,但我也需要能够从 XAML 字符串进行打印(因此仅依赖显示的工作流设计器是行不通的 - 我需要一个独立的工作流设计器)。

我尝试了以下代码:

public void Print()
{
    var printDlg = new PrintDialog();
    if (printDlg.ShowDialog() != true) return;
    _workflowDesigner.Flush();
    var wd = new WorkflowDesigner();
    DynamicActivity rootActivity;
    using (var sr = new StringReader(_workflowDesigner.Text))
    {
        rootActivity = (DynamicActivity)ActivityXamlServices.Load(sr);
    }
    // wrap the activity in an ActivityBuilder because the designer expects it this way
    var ab = new ActivityBuilder
    {
        Implementation = rootActivity.Implementation?.Invoke(),
        Name = rootActivity.Name
    };
    wd.Load(ab);
    var grid = new Grid();
    grid.Children.Add(wd.View);
    printDlg.PrintVisual(grid, "My Workflow");
}

从重新承载的设计器打印 .NET WF4 工作流

你必须让设计器实际呈现活动。有关原因和操作方法的详细信息,请参阅此 MSDN 博客。博客条目是关于另存为图像的,但同样的概念适用。 先渲染它,然后打印它。