As mentioned in previous post WF v4.0 is enhanced in many ways and one of those is “Complete workflow/activity authoring in XAML”.

A key enhancement to support this feature is the addition of Schema support in XAML. While  XAML is used to represent objects but there was no way to specify type information in XAML. Schema support provides exactly this functionality using XAML vocabulary. Let’s explore this feature. In the  PDC bits XAML Schema functionality is available in System.XAML.Runtime.dll assembly in (System.Runtime.Xaml.Schema) namespace.

Let’s create a simple type in c#.

public class Employee

{

    public string Email { get; set; }

    public bool SendEmail() { return true; }

    public event EventHandler NewMessage;

}

Now this same type can be created in XAML using XAML Schema language. But here I will use a slightly different approach and will convert above type to its XAML schema representation using following simple code.

static void Main(string[] args)

{

1.  var resolver = new XamlSchemaTypeResolver();

2.  SchemaType st =resolver.GenerateSchemaTypes(Assembly.GetExecutingAssembly()).First();

3.  string xaml = XamlServices.Save(st);

}

What I get back is this:

<p:SchemaType BaseType="p:Object" Name="p1:Employee"

              xmlns:p="http://schemas.microsoft.com/netfx/2008/xaml/schema"

              xmlns:s="clr-namespace:System;assembly=mscorlib"

              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <p:SchemaProperty Name="Email" Type="p:String" />

  <p:SchemaMethod Name="SendEmail">

    <p:Signature ReturnType="p:Boolean" />

  </p:SchemaMethod>

  <p:SchemaEvent Name="NewMessage">

    <p:SchemaEvent.Signature>

      <p:Signature ReturnType="{x:Null}">

        <p:SignatureParameter Direction="In" Name="sender" Type="p:Object" />

        <p:SignatureParameter Direction="In" Name="e" Type="s:EventArgs" />

      </p:Signature>

    </p:SchemaEvent.Signature>

  </p:SchemaEvent>

</p:SchemaType>

 

The SchemaType object on line 2 has an attached property which link it back to the type from which this object was generated.

This exactly same language is used to declare arguments/data flow when defining workflow/activities in XAML. Schema language provided the solution to construct new types in XAML without falling back to code which was one of major hurdle in  the authoring of  XAML only workflows in V1.