この投稿の目的:
私は、Workflow FoundationがStackOverflowであまり人気がなく、おそらく多くの答えがないか、まったくないことを理解しています。この投稿は、カスタムデザイナークラスを通じてワークフローアクティビティの外観をカスタマイズしようとしている人々へのリソースとして意図されています。
目標:
次のことを実現するために、ワークフローアクティビティのカスタムデザイナークラスを作成しようとしています。
アクティビティをあまり技術的に見えないようにします。たとえば、内部オブジェクト名をアクティビティの「タイトル」として表示する必要はありません。代わりに、より説明的なものを表示したいと思います。
タイトルテキストの下に特定のプロパティの値を表示します。タイトルのすぐ下にいくつかのプロパティの値を表示して、他の場所(つまり、[プロパティ]ウィンドウ)を探す必要がないようにします。
カスタムドロップエリアを提供し、カスタム内部矢印を描画します。例として、非常に特定の場所にカスタムドロップエリアを設定できるようにしたいと思います。
私がこれまでに見つけたもの:
SequentialActivityDesigner
次のように派生するカスタムデザイナークラスを作成しました。
[Designer(typeof(SomeDesigner))]
public partial class SomeActivity: CompositeActivity
{
...
}
class PlainDesigner : SequentialActivityDesigner
{
...
}
いくつかのプロパティとメソッドをオーバーライドすることOnPaint
で、プロパティとアクティビティの表示方法との間の次の対応について知りました。
図1.のいくつかのプロパティSequentialActivityDesigner
と表示されたアクティビティの関係。
目標#1(アクティビティの技術性を低下させる)および目標#2(タイトルテキストの下にプロパティの値を表示する)の可能な解決策:
表示されるタイトルは、
Title
プロパティを介して変更できます。タイトルの下に追加情報を表示するためにより多くのスペースが必要な場合は、
TitleHeight
プロパティを増やすことができます(つまり、プロパティをオーバーライドして、を返すようにします。base.TitleHeight + n
ここで、n
は正の整数です)。メソッドをオーバーライドし、
OnPaint
で予約された領域に追加のテキストを描画しますTitleHeight
。
未解決の質問:
使用されるコネクタ、接続、および接続ポイントは何ですか?それらは必要なようですが、どのような目的のために?
ドロップターゲットはメソッドを介して取得できますが
GetDropTargets
、これは必ずしもデザイナーが実際にドロップされたアクティビティを配置する場所ではないようです。アクティビティをワークフロー全体にドラッグすると、デザイナーはアクティビティをドロップできる小さな緑色のプラス記号を表示します。これらのプラス記号の位置をどのように把握しますか?設計者は、コネクタの線と矢印をどこに描くかをどのように判断しますか?