1

この投稿の目的:

私は、Workflow FoundationがStackOverflowであまり人気がなく、おそらく多くの答えがないか、まったくないことを理解しています。この投稿は、カスタムデザイナークラスを通じてワークフローアクティビティの外観をカスタマイズしようとしている人々へのリソースとして意図されています。


目標:

次のことを実現するために、ワークフローアクティビティのカスタムデザイナークラスを作成しようとしています。

  1. アクティビティをあまり技術的に見えないようにします。たとえば、内部オブジェクト名をアクティビティの「タイトル」として表示する必要はありません。代わりに、より説明的なものを表示したいと思います。

  2. タイトルテキストの下に特定のプロパティの値を表示します。タイトルのすぐ下にいくつかのプロパティの値を表示して、他の場所(つまり、[プロパティ]ウィンドウ)を探す必要がないようにします。

  3. カスタムドロップエリアを提供し、カスタム内部矢印を描画します。例として、非常に特定の場所にカスタムドロップエリアを設定できるようにしたいと思います。


私がこれまでに見つけたもの:

SequentialActivityDesigner次のように派生するカスタムデザイナークラスを作成しました。

[Designer(typeof(SomeDesigner))]
public partial class SomeActivity: CompositeActivity
{
    ...
}

class PlainDesigner : SequentialActivityDesigner
{
    ...
}

いくつかのプロパティとメソッドをオーバーライドすることOnPaintで、プロパティとアクティビティの表示方法との間の次の対応について知りました。

SequentialActivityDesignerのいくつかのプロパティと表示されたアクティビティとの関係を示す図。
図1.のいくつかのプロパティSequentialActivityDesignerと表示されたアクティビティの関係。

目標#1(アクティビティの技術性を低下させる)および目標#2(タイトルテキストの下にプロパティの値を表示するの可能な解決策:

  • 表示されるタイトルは、Titleプロパティを介して変更できます。

  • タイトルの下に追加情報を表示するためにより多くのスペースが必要な場合は、TitleHeightプロパティを増やすことができます(つまり、プロパティをオーバーライドして、を返すようにします。base.TitleHeight + nここで、nは正の整数です)。

  • メソッドをオーバーライドし、OnPaintで予約された領域に追加のテキストを描画しますTitleHeight


未解決の質問:

  • 使用されるコネクタ、接続、および接続ポイントは何ですか?それらは必要なようですが、どのような目的のために?

  • ドロップターゲットはメソッドを介して取得できますがGetDropTargets、これは必ずしもデザイナーが実際にドロップされたアクティビティを配置する場所ではないようです。アクティビティをワークフロー全体にドラッグすると、デザイナーはアクティビティをドロップできる小さな緑色のプラス記号を表示します。これらのプラス記号の位置をどのように把握しますか?

  • 設計者は、コネクタの線と矢印をどこに描くかをどのように判断しますか?

4

1 に答える 1

2

WF 3.5に大量に(そしてこれは大量になりますが)注ぐ本当に本当に正当な理由がない限り、そうしないでください。代わりにWF4を使用してください。WF4を使用すると、WPFによってXamlを使用してレンダリングされるアクティビティの外観をより細かく制御できます。

WF 3.5は非常に技術的で、ユーザーにとって非常に恐ろしいものでした。WF4はこれらの問題に対処するように設計されており、それはあなたの目標に沿っているようです。

于 2010-04-25T17:52:15.960 に答える