Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

Der ActivityDesigner sollte auf die darunterliegende Aktivität abgestimmt sein.

  • Auf die Aktivität greifen Sie über das ModelItem-Property zu.
  • Das ExpressionTextBox-Control Ermöglicht die Eingabe von VB-Ausdrücken für In/Out-Argumente
  • Aktivitäten werden über das DesignerAttribute mit dem Designer verknüpft.

Folgende Dinge sind zu beachten: 

  • Der Workflow-Designer sollte In-Argumente eingeben können, ohne dabei auf das Eigenschaften-Fenster zurückgreifen zu müssen.
  • Alle für die Aktivität nötigen Argumente sollten im Designer eingegeben werden können.
  • Die Reihenfolge der Argumente sollte deutlich sein : In-Argumente => In/Out-Argumente => Out-Argumente
  • Labels und Beschreibungen der Argumente sollten lokalisiert verfügbar sein (Deutsch/Englisch).
  • Der Inhalt des Controls sollte einklappbar sein (Content-Presenter).

Hinweis für VB:

  • Namespaces werden in VB bei XAML Dateien nicht unterstützt, es wird für die Versionierung daher empfohlen die Version in den Namen einzubinden.


(ActivityDesigner in VisualStudio anlegen)


Codeblock
languagexml
titleBeispiel für einen ActivityDesigner C#
linenumberstrue
collapsetrue
<sap:ActivityDesigner x:Class="Designer.HelloWorld.V01.HelloWorldDesigner"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Designer.HelloWorld.V01"
             xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation"
             xmlns:converters="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation"
             xmlns:system="clr-namespace:System;assembly=mscorlib"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">
    <sap:ActivityDesigner.Resources>
        <ResourceDictionary>
            <converters:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" />

            <DataTemplate x:Key="CollapsedTemplate">
                <Label Padding="0" Foreground="#FF6D6D6D" FontStyle="Italic"
                   HorizontalAlignment="Center" VerticalAlignment="Center"
                   Content="{x:Static res:Resources.CollapsedToolTip}"/>
            </DataTemplate>

            <DataTemplate x:Key="ExpandTemplate" DataType="{x:Type local:HelloWorldDesigner}">
                <Grid>

                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>

                    <!-- InArgumente und Eigenschaften ... -->

                    <!-- Text -->
                    <TextBlock Grid.Row="0" Grid.Column="0" Margin="0 10 0 0" Text="Text" ToolTip="Geben sie einen Text ein"/>
                    <sap:ExpressionTextBox Margin="4" Grid.Row="0" Grid.Column="1" OwnerActivity="{Binding ModelItem}"
                                        ExpressionType="system:String"
                                        Expression="{Binding ModelItem.Text, Mode=TwoWay, Converter={StaticResource ArgumentToExpressionConverter}, ConverterParameter=In}"/>

                    <!-- OutArgumente und Eigenschaften ... -->
                </Grid>
            </DataTemplate>

            <!-- Mechanismus, um die Aktivität auf und zuzuklappen-->
            <Style x:Key="ExpandOrCollapsedStyle" TargetType="{x:Type ContentPresenter}">
                <Setter Property="ContentTemplate" Value="{StaticResource CollapsedTemplate}"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=ShowExpanded}" Value="true">
                        <Setter Property="ContentTemplate" Value="{StaticResource ExpandTemplate}"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ResourceDictionary>
    </sap:ActivityDesigner.Resources>

    <ContentPresenter Style="{StaticResource ExpandOrCollapsedStyle}" Content="{Binding}"/>
</sap:ActivityDesigner>




Codeblock
languagec#
titleCode Behind C#
linenumberstrue
collapsetrue
namespace Designer.HelloWorld.V01
{
    /// <summary>
    /// Interaction logic for HelloWorld.xaml
    /// </summary>
    public partial class HelloWorldDesigner
    {
        public HelloWorldDesigner()
        {
            InitializeComponent();
        }
    }
}



Codeblock
languagexml
titleBeispiel für einen ActivityDesigner VB
linenumberstrue
collapsetrue
<sap:ActivityDesigner x:Class="HelloWorldDesignerV01"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Designer.HelloWorld.V01"
             xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation"
			 xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation"
             xmlns:converters="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation"
             xmlns:system="clr-namespace:System;assembly=mscorlib"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800"
			 Loaded="ActivityDesigner_Loaded">
    <sap:ActivityDesigner.Resources>
        <ResourceDictionary>
            <converters:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" />

            <DataTemplate x:Key="CollapsedTemplate">
                <Label Padding="0" Foreground="#FF6D6D6D" FontStyle="Italic"
                   HorizontalAlignment="Center" VerticalAlignment="Center"
                   Content="Zum Anzeigen doppelklicken."/>
            </DataTemplate>

            <DataTemplate x:Key="ExpandTemplate" DataType="HelloWorldActivity:HelloWorldDesignerV01">
                <Grid>

                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>

                    <!-- InArgumente und Eigenschaften ... -->

                    <!-- Text -->
                    <TextBlock Grid.Row="0" Grid.Column="0" Margin="0 10 0 0" Text="Text" ToolTip="Geben sie einen Text ein"/>
                    <sapv:ExpressionTextBox Margin="4" Grid.Row="0" Grid.Column="1" OwnerActivity="{Binding ModelItem}"
                                        ExpressionType="system:String"
                                        Expression="{Binding ModelItem.Text, Mode=TwoWay, Converter={StaticResource ArgumentToExpressionConverter}, ConverterParameter=In}"/>

                    <!-- OutArgumente und Eigenschaften ... -->
                </Grid>
            </DataTemplate>

            <!-- Mechanismus, um die Aktivität auf und zuzuklappen-->
            <Style x:Key="ExpandOrCollapsedStyle" TargetType="{x:Type ContentPresenter}">
                <Setter Property="ContentTemplate" Value="{StaticResource CollapsedTemplate}"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=ShowExpanded}" Value="true">
                        <Setter Property="ContentTemplate" Value="{StaticResource ExpandTemplate}"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ResourceDictionary>
    </sap:ActivityDesigner.Resources>

    <ContentPresenter Style="{StaticResource ExpandOrCollapsedStyle}" Content="{Binding}"/>
</sap:ActivityDesigner>



Codeblock
languagevb
titleCode Behind VB
linenumberstrue
collapsetrue
Imports System.Activities.Presentation

Class HelloWorldDesigner01
    Inherits ActivityDesigner
    Private Sub ActivityDesigner_Loaded(sender As Object, e As RoutedEventArgs)

    End Sub

End Class


Testen des Designers

Den Designer können Sie testen, indem Sie Ihrem Projekt eine Activity-Xaml-Datei hinzufügen. (New Item > Workflow > Activity)

Hier können Sie nach einem Build Ihre Aktivität mit Drag&Drop aus der Toolbar ziehen und Ihren Designer überprüfen. Über das Eigenschaftsfenster von VisualStudio können Sie die Eigenschaften der Aktivität einsehen.