自定义工作流活动的外观的两种方式2010-11-25 博客园 朱祁林经常有童鞋在群里面问同样一个问题:如何自定义WF4.0活动的外观。其实一 共有两种方式去实现自定义WF4.0活动的外观:一种方式我在以前的博文上实现 过,见:WF4.0实战(十一):邮件通知;另外一种方式我将在这里讲述它的实 现。故这篇文章中,我将分别用这两种方式去一个最简单的WF4.0自定义活动外 观的例子。第一种方式:使用[Designer]属性。命名空间为:using System.ComponentModel;代码如下:
[Designer(typeof(CustomWriteLineDesigner))]
public sealed class CustomWriteLine : CodeActivity
{
[RequiredArgument]
public InArgument<string> Text { get; set; }
protected override void Execute(CodeActivityContext context)
{
Console.WriteLine(context.GetValue(this.Text));
}
}
上面代码中的CustomWriteLineDesigner是自定义外观的XAML文件。第一种方 式代码还可以这样写:
[ ("MyActivityDesigner.CustomWriteLineDesigner,MyActivityDesigner")]
public sealed class CustomWriteLine : CodeActivity
{
[RequiredArgument]
public InArgument<string> Text { get; set; }
protected override void Execute(CodeActivityContext context)
{
Console.WriteLine(context.GetValue(this.Text));
}
}
CustomWriteLineDesigner的代码如下:
<sap:ActivityDesigner x:Class="MyActivityDesigner.CustomWriteLineDesigner"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sadc="clr- namespace:System.Activities.Presentation.Converters;assembly=System.Ac tivities.Presentation"
xmlns:sap="clr- namespace:System.Activities.Presentation;assembly=System.Activities.Pr esentation"
xmlns:sapv="clr- namespace:System.Activities.Presentation.View;assembly=System.Activiti es.Presentation">
<sap:ActivityDesigner.Resources>
<sadc:ArgumentToExpressionConverter x:Key="argConverter"/>
</sap:ActivityDesigner.Resources>
<sap:ActivityDesigner.Icon>
<DrawingBrush>
<DrawingBrush.Drawing>
<ImageDrawing>
<ImageDrawing.Rect>
<Rect Location="0,0" Size="16,16" ></Rect>
</ImageDrawing.Rect>
<ImageDrawing.ImageSource>
<BitmapImage UriSource="WriteLine.jpg" ></BitmapImage>
</ImageDrawing.ImageSource>
</ImageDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</sap:ActivityDesigner.Icon>
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="Text " Padding="0,2,4,2"/>
<sapv:ExpressionTextBox MaxLines="1" Grid.Column="1" Width="200"
Expression="{Binding Path=ModelItem.Message, Mode=TwoWay, Converter={StaticResource argConverter}, ConverterParameter=In}"
OwnerActivity="{Binding Path=ModelItem}" />
</Grid>
</sap:ActivityDesigner>
效果:

以上是第一种方式,如果有不清楚的地方可以参考:WF4.0实战(十一):邮 件通知