ExpressionTextBox是WF4中新提供的表达式编辑器,关于它的介绍可以看这篇文章 http://www.cnblogs.com/carysun/archive/2009/11/13/wf4-ExpressionTextBox.html,在SDK也有相关的Demo,但是SDK中的 ExpressionTextBox 例子,有两个问题
1.该例子中的MultiAssign活动如果你直接在工作流中使用,会报运行时错误。原代码如下:
namespace Microsoft.Samples.ExpressionTextBoxSample
{
// Sets To1 = Value1 and To2 = Value2
[Designer(typeof(MultiAssignDesigner))]
public sealed class MultiAssign : CodeActivity
{
public OutArgument To1 { get; set; }
public OutArgument To2 { get; set; }
public InArgument Value1 { get; set; }
public InArgument Value2 { get; set; }
protected override void Execute(CodeActivityContext context)
{
// Obtain the runtime value of the arguments
this.To1.Set(context, this.Value1.Get(context));
this.To2.Set(context, this.Value2.Get(context));
}
}
}
由于我们使用的参数OutArgument和InArgument都是非强类型的,运行时并不会自动添加非强类型的参数,所以我们需要手动做这个工作。我们在重写CacheMetadata中来完成,代码如下:
protected override void CacheMetadata(CodeActivityMetadata metadata)
{
AddArgument(metadata, this.To1, "To1", ArgumentDirection.Out);
AddArgument(metadata, this.To2, "To2", ArgumentDirection.Out);
AddArgument(metadata, this.Value1, "Value1", ArgumentDirection.In);
AddArgument(metadata, this.Value2, "Value2", ArgumentDirection.In);
}
void AddArgument(CodeActivityMetadata metadata, Argument argument, string argumentName, ArgumentDirection direction)
{
Type argumentType = typeof(object);
if (argument != null)
{
argumentType = argument.ArgumentType;
}
RuntimeArgument runtimeArgument = new RuntimeArgument(argumentName, argumentType, direction);
metadata.Bind(argument, runtimeArgument);
metadata.AddArgument(runtimeArgument);
}
2.当然如果你使用强类型的话就不会有这个问题,比如将参数调整为如下:
public OutArgument<string> To1 { get; set; }
public OutArgument<string> To2 { get; set; }
public InArgument<string> Value1 { get; set; }
public InArgument<string> Value2 { get; set; }
还有一个就是如果没有指定ExpressionTextBox的ExpressionType属性,这会导致当你在设计器中如果你表达式值的类型不符合的时候,就会出现下图中比较奇怪的红框。
你可以设置该属性,引入命名空间并设置如下:
xmlns:sys="clr-namespace:System;assembly=mscorlib"
ExpressionType="{x:Type TypeName=sys:String}"
这样设计就可以正常检查你输入的类型了。
周末休闲:
迪拜是阿联酋第二大酋长国,拥有世界上第一家七星级酒店、全球最大的购物中心、世界最大的室内滑雪场,来看看这些堪称奇迹的建筑吧!! 阅读全文http://www.cnblogs.com/carysun/archive/2009/12/05/dibai.html
参考资源:
1.http://blogs.msdn.com/cathyk/archive/2009/12/03/using-untyped-arguments-in-an-expressiontextbox.aspx
3. http://www.cnblogs.com/carysun/archive/2009/11/13/wf4-ExpressionTextBox.html
4. http://msdn.microsoft.com/en-us/library/ee663224(VS.100).aspx
5. http://msdn.microsoft.com/en-us/library/system.activities.presentation.view.expressiontextbox.expressiontype(VS.100).aspx
本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2009/12/05/ExpressionTextBox-issue.html,如需转载请自行联系原作者