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 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<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 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
namespace Designer.HelloWorld.V01
{
/// <summary>
/// Interaction logic for HelloWorld.xaml
/// </summary>
public partial class HelloWorldDesigner
{
public HelloWorldDesigner()
{
InitializeComponent();
}
}
} |
Codeblock | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<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 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
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.