WPF和Workflow基础不能一起工作

时间:2014-09-21 09:20:20

标签: c# wpf xaml workflow-foundation

我真的很奇怪。我在2012年或2013年创建了WPF项目VS无所谓。我使用.NET 4.5。

  1. 我向该项目添加了一个新的Activity(Workflow类)。它的名字是CustomActivity。
  2. 然后我添加一个具有附加属性的新类,例如:

    public class AttachedObject : DependencyObject
    {
    public static readonly DependencyProperty NameProperty = DependencyProperty.RegisterAttached(
                  "Name",
                  typeof(string),
                  typeof(AttachedObject),
                  new FrameworkPropertyMetadata(
    string.Empty,frameworkPropertyMetadataOptions.AffectsRender));
    
    public static void SetName(ContentControl element, string value)
    {
        element.SetValue(NameProperty, value);
    }
    
    public static string GetName(ContentControl element)
    {
        return (string)element.GetValue(NameProperty);
    }
    }
    
  3. 最后一步是改变MainWindow类:

    public MainWindow()
    {
        InitializeComponent();
        var activity = new CustomActivity();
    }
    
    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:wpfApplication1="clr-namespace:WpfApplication1;assembly=WpfApplication1"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <ContentControl wpfApplication1:AttachedObject.Name="MainArea"/>
        </Grid>
    </Window>
    
  4. 问题是它因为以下错误而无法编译:

      

    错误1找不到类型或命名空间名称'CustomActivity'(您是否缺少using指令或程序集引用?)WpfApplication1 \ MainWindow.xaml.cs 13 32 WpfApplication1

    CustomActivity具有默认命名空间。在obj文件夹中生成了CustomActivity.g.cs,所以我不知道发生了什么。 它100%可重复。当我从xaml中删除使用CustomActivity或使用AttachedObject时,问题就会消失。

2 个答案:

答案 0 :(得分:1)

尝试替换它:

xmlns:wpfApplication1="clr-namespace:WpfApplication1;assembly=WpfApplication1"

用这个

 xmlns:wpfApplication1="clr-namespace:WpfApplication1"

您看到的错误是由于WPF应用程序中的“已知”问题导致从当前程序集引用clr名称空间的xaml名称空间不需要完整的程序集限定名称。如果要声明从另一个程序集引用clr名称空间的xaml名称空间,则必须指定全名(使用; [assemblyname]语法)。

Workflow Foundation与它无关。

编辑: 没有意识到这是一个xaml活动。 但是,你仍然可以通过一些黑客来使它工作,但我不会推荐它。 您收到该错误的原因是由于VS在为WPF(页面)创建xaml工件时使用的代码生成和构建操作不同:

System.Windows.Application.LoadComponent(this, resourceLocater);

并在创建xaml活动时(XamlAppDef):

 typeof(CustomActivity).Assembly.GetManifestResourceStream(resourceName);

如果你将CustomActivity xaml构建操作转换为Page,那么整个事情就会编译 - 但我猜测其他地方可能会被破坏......或者不知道,谁知道呢。我的猜测是这两种xaml并不意味着在VS WPF应用程序项目模板中共存。但您仍然可以在WF活动库中定义活动,这样您的活动也可以更容易地重用于其他项目,WPF,控制台甚至服务。

答案 1 :(得分:0)

我在Visual Studio 2017下遇到了同样的问题。

我的问题是Visual Studio没有在使用它们的代码之前编译Workflow活动。

要修复它,我所做的是将所有工作流程移动到其他项目dll,因此Visual Studio被迫在使用它们的类之前编译工作流程。