首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WF 4.0 自訂活動外觀兩大技法:Designer 屬性 vs Metadata 註冊

     編輯:關於.NET

兩種實現路徑

自訂活動設計器外觀有兩種方式:硬編碼 [Designer] 屬性與獨立專案註冊 Metadata。後者為微軟內建活動採用方式,靈活度更高。

方式一:[Designer] 屬性直接指定

[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));
}

或用字串指定組件限定名稱:

[Designer("MyActivityDesigner.CustomWriteLineDesigner,MyActivityDesigner")]

設計器 XAML (CustomWriteLineDesigner.xaml) 定義圖示、表達式編輯框佈局:

<sap:ActivityDesigner ...>
  <sap:ActivityDesigner.Icon>
    <DrawingBrush><ImageDrawing ImageSource="WriteLine.jpg" /></DrawingBrush>
  </sap:ActivityDesigner.Icon>
  <Grid>
    <TextBlock Text="Text " />
    <sapv:ExpressionTextBox Expression="{Binding Path=ModelItem.Text, ...}" />
  </Grid>
</sap:ActivityDesigner>

方式一效果

方式二:獨立設計器專案 + Metadata 註冊(推薦)

專案結構

  • MyActivityDesignerTwo:Activity Library(邏輯層)
  • MyActivityDesignerTwo.Design:Activity Designer Library(UI 層)

專案結構

邏輯層移除 Designer 屬性

public sealed class CustomWriteLine : CodeActivity
{
    [RequiredArgument] public InArgument<string> Text { get; set; }
    protected override void Execute(CodeActivityContext context)
        => Console.WriteLine(context.GetValue(this.Text));
}

UI 層實作 IRegisterMetadata

public class DesignerMetadata : IRegisterMetadata
{
    public void Register()
    {
        var builder = new AttributeTableBuilder();
        builder.AddCustomAttributes(typeof(CustomWriteLine),
            new DesignerAttribute(typeof(CustomWriteLineDesigner)));
        MetadataStore.AddAttributeTable(builder.CreateTable());
    }
}

關鍵:輸出路徑統一

將設計器專案 建置輸出路徑 設為邏輯層專案 bin\Debug 同目錄,兩 DLL 共存即自動關聯:

輸出路徑設定

效果對比

自訂活動寬度自適應內容,完整顯示長文字屬性;內建活動會截斷。設計器上更直觀,適合面向業務用戶的流程建模:

對比圖

總結

方式一簡單直接,方式二關注點分離、利於團隊協作與複用,符合微軟最佳實踐。自訂外觀讓設計器更直觀,是將工作流交付給非技術人員使用的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved