思った通り、注釈は添付プロパティとしてワークフロー定義内に保存されます。ワークフローの xaml での注釈は次のようになります。
<Sequence
xmlns:derp="http://schemas.microsoft.com/netfx/2010/xaml/activities/presentation"
derp:Annotation.AnnotationText="This is an annotation!">
ほら、他の添付プロパティと同じように。そうではないことを除いて。添付されたDependencyPropertyではなく、添付されたワークフロープロパティです。つまり、アタッチされたプロパティ サービスとAnnotation クラスを介して機能します。ModelItem の注釈テキストの取得と設定は簡単です (以下で説明します)。
実際、注釈をサポートするのはそれほど難しくありません。UIががらくたのように見えることを気にしない限り。これは、迅速で汚い実装です。
UI で、注釈テキストを保持および編集するためのコントロールをいくつか追加します。
<sap:WorkflowViewElement
x:Class="AnnotationSupport.MyActivityDesigner"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation"
xmlns:ann="clr-namespace:System.Activities.Presentation.Annotations;assembly=System.Activities.Presentation"
xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation"
x:Name="root"
MinWidth="100"
MinHeight="100">
<Grid Background="red">
<Grid.RowDefinitions>
<RowDefinition
Height="auto" />
<RowDefinition />
</Grid.RowDefinitions>
<Expander
IsExpanded="False">
<!-- HERE SHE BLOWS -->
<TextBox
Text="{Binding ModelItem.AnnotationText}" />
</Expander>
<TextBox
Grid.Row="1"
Text="{Binding ModelItem.Text}"
Margin="10" />
</Grid>
</sap:WorkflowViewElement>
Annotation テキストが変更されるたびに、他のプロパティと同様に、ModelItem の PropertyChanged イベントが発生します。コードから取得する場合、最も簡単な方法は ModelItem を にキャストすることdynamic
です。
private void SetAnnotationLol(string newValue)
{
if(ModelItem != null)
((dynamic)ModelItem).AnnotationText = newValue;
}
ここで、Fx アクティビティのような優れた UI を作成したい場合は...まあ...
注釈の表示と編集を処理するカスタムAdornerの作成は、あなたに任せます。実際には、最初に見えるほど難しくありません。まだ行っていない場合は、ここにチャンスがあります。