重新托管的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;
  }
}
    

要回复问题请先登录注册