1

カスタム アクティビティ デザイナーを作成しましたが、「ヘッダー」部分 (既定では ModelItem.DisplayName が表示されます) を制御したかったので、これを実現する唯一の方法は、デザイナーを派生させることです。 ActivityDesigner ではなく WorkflowViewElement。それで、それはうまくいくようで、すべてうまくいっています。ただし、WF4.5 の新しい注釈機能をサポートしたいと考えています。
デザイン サーフェイスのワークフロー要素に注釈を追加すると、注釈を付けている要素 + 実際の注釈要素にアイコンが追加されることを考えると、カスタム WorkflowViewElement には、この動作をサポートするためにいくつかの追加要素が必要であることは明らかです。 . 誰でも助けることができますか?

ありがとう

4

1 に答える 1

2

思った通り、注釈は添付プロパティとしてワークフロー定義内に保存されます。ワークフローの 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の作成は、あなたに任せます。実際には、最初に見えるほど難しくありません。まだ行っていない場合は、ここにチャンスがあります。

于 2012-11-01T20:25:43.420 に答える