而 activity 在 WF 4 中重新托管设计器

While activity in WF 4 rehosted designer

我写了一个自定义 activity,其中包含一个简单的 ExpressionTextBox:

       <sapv:ExpressionTextBox HintText="List of Strings" 
        Grid.Row ="0" Grid.Column="1" MaxWidth="150" MinWidth="150" Margin="5"
        OwnerActivity="{Binding Path=ModelItem}"
        Expression="{Binding Path=ModelItem.Test, Mode=TwoWay, 
            Converter={StaticResource ArgumentToExpressionConverter}, 
            ConverterParameter=In }" />

在库中,我添加了如下测试 属性:

       public InArgument<string> Test { get; set; }

所以,这就是全部:

一个 while 和一个在其范围内定义的类型 i 的变量 i。我希望返回 "Test1"、"Test2" ... 等等,但我得到的是:

所以,变量 i 被视为一个字符串,而不是解释为变量部分中定义的整数。 我也用一个简单的 属性 类型的字符串试过这个。然后我认为 InArgument 可能会处理这件事..我不知道还能做什么。有什么线索吗?

我可能需要将您的更多代码发布到 bb 才能提供更多帮助,并充分理解您想要实现的目标。但是从屏幕截图中我可以看到您没有访问缓存元数据方法中的运行时参数。随后,您调用的控制台 writeline 方法正在解释原始文本值,而不是正确评估表达式。

在您的代码中尝试以下内容 activity

using System; 
using System.ComponentModel; 
using System.IO;
using System.Runtime; 
using System.Activities.Validation;
using System.Collections.Generic;
using System.Windows.Markup;
using System.Collections.ObjectModel;
using System.Activities; 

namespace WorkflowConsoleApplication2
{

    public sealed class CodeActivity1 : CodeActivity
    {
        // Define an activity input argument of type string
        [DefaultValue(null)]
        public InArgument<string> Test
        {
            get;
            set;
        }

        protected override void CacheMetadata(CodeActivityMetadata metadata)
        {
            RuntimeArgument textArgument = new RuntimeArgument("Test",    typeof(string), ArgumentDirection.In);
            metadata.Bind(this.Test, textArgument);


            metadata.SetArgumentsCollection(
            new Collection<RuntimeArgument> 
            {
                textArgument,
            });
        }

        // If your activity returns a value, derive from CodeActivity<TResult>
        // and return the value from the Execute method.
        protected override void Execute(CodeActivityContext context)
        {
            Console.WriteLine(this.Test.Get(context)); 
        }
}

}