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