如何解决重新托管的Workflow Designer默认导入的名称空间
| 我正在尝试重新托管WF4工作流设计器。在“导入”标签中,我想默认导入一些名称空间。看起来像这样: 导入的名称空间http://imageshack.us/m/850/5383/imports.png 经过大量研究,我发现如果您workflowDesigner.Context.Items.GetValue<ImportedNamespaceContextItem>().ImportedNamespaces
您将看到已经导入的内容。但是,手动向该集合添加名称空间似乎没有任何效果。因此,我的问题是:如何以正确的方式将导入的名称空间添加到此列表?或者,如何使用手动添加的名称空间导入来刷新上下文?
以下解决方案的其他信息:
为了解决这个问题,我创建了所需的“ clean slate”活动XAML文件,将其添加到我的项目中,将其“构建操作”设置为“嵌入式资源”,并将其“自定义工具”设置为空字符串。
然后,在初始化WorkflowDesigner的代码中,执行以下操作:
_Wd = new WorkflowDesigner();
_Wd.Load(
XamlServices.Load(
ActivityXamlServices.CreateBuilderReader(
new XamlXmlReader(
Assembly.GetEntryAssembly().GetManifestResourceStream( \"WpfApplication1.New.xaml\" )
)
)
) as ActivityBuilder
);
现在,我的工作流程已导入所有所需的名称空间。
解决方法
我这样做的方法不是先从完全空的工作流开始,而是创建具有所需导入的空模板。添加类似:
xmlns:si=\"clr-namespace:System.IO;assembly=mscorlib\"
到XAML文件中的根活动以导入System.IO
,您的解决方案还通过重新托管基于流的活动解决了一个不同的问题,而且我找不到任何建议的解决方案,因此我将其发布在这里。
症状是您在设计器主机中获得一个模式对话框,该对话框在System.Activities.Presentation.View.ImportDesigner.OnContextChanged()中声明空引用异常,
如果您使用
ActivityXamlServices.Load(aStream) // wrong way!
原因:在
OnContextChanged() // of class ImportDesigner
在https://referencesource.microsoft.com/#System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/View/ImportDesigner.xaml.cs,1d24713ba95e69c5中访问\“ Imports \”的.Collection属性引发空指针异常。可能是因为没有加载有关导入名称空间的信息。
解决方案:使用活动
ab.Implementation // of the ActivityBuilder ab
从Alex \的帖子中并将其.Load()放入WorkflowDesigner实例。
完整代码段:
public static Activity LoadActivityFrom(FileInfo xaml)
{
using (var rd = xaml.OpenRead())
using (var xr = new System.Xaml.XamlXmlReader(rd))
using (var br = System.Activities.XamlIntegration.ActivityXamlServices.CreateBuilderReader(xr))
{
var ab = System.Xaml.XamlServices.Load(br) as System.Activities.ActivityBuilder;
return ab.Implementation;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。