然后我添加一个具有附加属性的新类,例如:
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);
}
}
最后一步是改变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>
问题是它因为以下错误而无法编译:
错误1找不到类型或命名空间名称'CustomActivity'(您是否缺少using指令或程序集引用?)WpfApplication1 \ MainWindow.xaml.cs 13 32 WpfApplication1
CustomActivity具有默认命名空间。在obj文件夹中生成了CustomActivity.g.cs,所以我不知道发生了什么。 它100%可重复。当我从xaml中删除使用CustomActivity或使用AttachedObject时,问题就会消失。
答案 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被迫在使用它们的类之前编译工作流程。