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
2.http://msdn.microsoft.com/en-us/library/ee663224(VS.100).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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器