从重新托管的设计器打印 .NET WF4 工作流
Print .NET WF4 workflow from rehosted designer
我想打印来自 .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");
}
您必须让设计人员实际渲染 activity。有关原因和方法的详细信息,请参阅 this MSDN blog。博客条目是关于另存为图像的,但同样的概念也适用。先渲染再打印。
我想打印来自 .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");
}
您必须让设计人员实际渲染 activity。有关原因和方法的详细信息,请参阅 this MSDN blog。博客条目是关于另存为图像的,但同样的概念也适用。先渲染再打印。