Zum Ende der Metadaten springen
Zum Anfang der Metadaten

Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 20 Nächste Version anzeigen »

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)

Beispiel für einen ActivityDesigner C#
<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>


Code Behind C#
namespace Designer.HelloWorld.V01
{
    /// <summary>
    /// Interaction logic for HelloWorld.xaml
    /// </summary>
    public partial class HelloWorldDesigner
    {
        public HelloWorldDesigner()
        {
            InitializeComponent();
        }
    }
}
Beispiel für einen ActivityDesigner VB
<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>
Code Behind VB
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.

  • Keine Stichwörter