- Versionshinweise
- Überblick
- Erste Schritte
- UiPath-Marktplatzanbieter
- Marketplace-Kunden
- Veröffentlichungsrichtlinien
- Veröffentlichungsrichtlinien für sofort einsatzbereite Automatisierungen
- Veröffentlichungsrichtlinien für Lösungsbeschleuniger
- Veröffentlichungsrichtlinien für Integration Service-Connectors
- Sicherheit und IP-Schutz
- Andere UiPath-Auflistungen
- Node-RED
- Einrichten
- Teams
- Microsoft Teams-Scope
- Team erstellen
- Team aus Gruppe erstellen
- Team abrufen
- Teams abrufen
- Kanäle
- Create Channel
- Kanal löschen
- Kanal abrufen
- Kanäle abrufen
- Updatekanal
- Chats
- Chat abrufen
- Chats abrufen
- Chat-Mitglieder abrufen
- Messages
- Get message
- Get Messages
- Nachrichtenantworten erhalten
- Auf Nachricht antworten
- Send Message
- Events
- Termin erstellen
- Ereignis löschen
- Ereignis abrufen
- Ereignisse abrufen
- Benutzer
- Get User Presence
- Wie es funktioniert
- Technische Referenzen
- Erste Schritte
- Über
- Einrichten
- Technische Referenzen
- Azure Form Recognizer Scope
- Aktivitäten
- Formular analysieren
- Analysieren Formular asynchron
- Formularergebnis analysieren . abrufen
- Beleg analysieren
- Beleg asynchron analysieren
- Ergebnis der „Beleganalyse“ abrufen
- Layout analysieren
- Analyze Layout async
- Ergebnis „Layout analysieren“ abrufen
- Modell trainieren
- Modelle abrufen
- Modellschlüssel abrufen
- Modellinformationen abrufen
- Modell löschen
- Konnektoren
- So werden Aktivitäten erstellt
- Ihre Integration entwickeln
Die Designer-Datei
Einführung
Eine vollständige Aktivität kann zwar nur mit der Aktivitätsdefinitionsdatei erstellt werden, aber die Benutzererfahrung wird fast immer durch Hinzufügen eines Designers oder einer Benutzeroberfläche verbessert. Designer werden in XAML geschrieben, einer XML-basierten Sprache, (hier ausführlicher beschrieben) und zum Erstellen von Front-Ends für Windows Presentation Foundation (WPF)-Anwendungen verwendet.
Navigieren Sie zur Datei „ChildActivityDesigner.xaml “, und gehen Sie sie Abschnitt für Abschnitt durch, um besser zu verstehen, wie Sie Ihre Aktivität mit einer Benutzeroberfläche verbessern können.
<sap:ActivityDesigner x:Class="MyCompany.MyProduct.Activities.Design.ChildActivityDesigner"
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:converters="clr-namespace:UiPath.Shared.Activities.Design.Converters">
<a href="sap:ActivityDesigner.Resources">sap:ActivityDesigner.Resources</a>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="..\)\)Themes\)\)Generic.xaml" />
</ResourceDictionary.MergedDictionaries>
<converters:ActivityIconConverter x:Key="ActivityIconConverter" />
</ResourceDictionary>
</sap:ActivityDesigner.Resources>
<a href="sap:ActivityDesigner.Icon">sap:ActivityDesigner.Icon</a>
<DrawingBrush Stretch="Uniform" Drawing="{Binding Path=ModelItem, Converter={StaticResource ActivityIconConverter}, ConverterParameter=pack://application:\)\),\)\),\)\),/MyCompany.MyProduct.Activities.Design;component/themes/icons.xaml}" />
</sap:ActivityDesigner.Icon>
</sap:ActivityDesigner>
<sap:ActivityDesigner x:Class="MyCompany.MyProduct.Activities.Design.ChildActivityDesigner"
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:converters="clr-namespace:UiPath.Shared.Activities.Design.Converters">
<a href="sap:ActivityDesigner.Resources">sap:ActivityDesigner.Resources</a>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="..\)\)Themes\)\)Generic.xaml" />
</ResourceDictionary.MergedDictionaries>
<converters:ActivityIconConverter x:Key="ActivityIconConverter" />
</ResourceDictionary>
</sap:ActivityDesigner.Resources>
<a href="sap:ActivityDesigner.Icon">sap:ActivityDesigner.Icon</a>
<DrawingBrush Stretch="Uniform" Drawing="{Binding Path=ModelItem, Converter={StaticResource ActivityIconConverter}, ConverterParameter=pack://application:\)\),\)\),\)\),/MyCompany.MyProduct.Activities.Design;component/themes/icons.xaml}" />
</sap:ActivityDesigner.Icon>
</sap:ActivityDesigner>
Alle Designer enthalten eine Komponente der obersten Ebene, in der eine Klasse deklariert wird und zusätzliche Namespaces importiert werden. Dieses Beispiel erweitert die ActivityDesigner -Klasse, die Basisklasse für alle diese Komponenten.
<sap:ActivityDesigner x:Class="MyCompany.MyProduct.Activities.Design.ChildActivityDesigner"
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:converters="clr-namespace:UiPath.Shared.Activities.Design.Converters">
<sap:ActivityDesigner x:Class="MyCompany.MyProduct.Activities.Design.ChildActivityDesigner"
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:converters="clr-namespace:UiPath.Shared.Activities.Design.Converters">
xmlns:<prefix>
hat. Diese Präfixe werden später in der Datei verwendet, um auf nützliche Komponenten zu verweisen.
Ressourcen sind wiederverwendbare Komponenten, Stile oder Daten, die für die Verwendung in einer XAML-Datei über eine ResourceDictionary -Komponente zur Verfügung gestellt werden. In diesem Beispiel werden zwei Arten von Ressourcen bereitgestellt – ein Wörterbuch von Stilen (Generic.xaml) und eine Konvertierungskomponente (ActivityIconConverter).
<a href="sap:ActivityDesigner.Resources">sap:ActivityDesigner.Resources</a>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="..\)\)Themes\)\)Generic.xaml" />
</ResourceDictionary.MergedDictionaries>
<converters:ActivityIconConverter x:Key="ActivityIconConverter" />
</ResourceDictionary>
</sap:ActivityDesigner.Resources>
<a href="sap:ActivityDesigner.Resources">sap:ActivityDesigner.Resources</a>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="..\)\)Themes\)\)Generic.xaml" />
</ResourceDictionary.MergedDictionaries>
<converters:ActivityIconConverter x:Key="ActivityIconConverter" />
</ResourceDictionary>
</sap:ActivityDesigner.Resources>
-
Generic.xaml ist eine weitere
ResourceDictionary
, die UiPath-Standardstile enthält, die das Erscheinungsbild von Designern einheitlich halten. Wenn Sie in diese Datei blicken, sehen Sie den folgenden Stil, der eine Standardhöhe für alleComboBox
-Objekte festlegt. Da wir dieses Wörterbuch in unsere XAML-Datei aufgenommen haben, haben alle Kombinationsfelder eine Standardhöhe von 23px.<Style TargetType="{x:Type ComboBox}"> <Setter Property="Height" Value="23" /> </Style>
<Style TargetType="{x:Type ComboBox}"> <Setter Property="Height" Value="23" /> </Style> -
ActivityIconConverter ist eine Dienstprogrammklasse, die über den Ordner Freigegeben bereitgestellt wird und es ermöglicht, alle Aktivitätssymbole auf standardmäßige Weise anzugeben. Weitere Informationen finden Sie im Abschnitt Symbole unten.
Symbole, wie sie in allen UiPath-Aktivitäten zu sehen sind, können direkt zu einer Designerdatei im XAML-Format hinzugefügt werden, aber wir bevorzugen es, sie alle in einer dedizierten Datei hinzuzufügen und den oben genannten ActivityIconConverter zu verwenden, um sie in jede Aktivität zu ziehen. Auf diese Weise wird die Designer-Hauptdatei nicht von oft langem Symbolcode überlastet.
Navigieren Sie in Ihrem Designprojekt zu Designs > Icons.xaml.
x:Key
, das die Form <Activity Name>Icon
hat. Der Symbolcode der untergeordneten Aktivität hat beispielsweise das folgende Format:
<DrawingBrush x:Key="ChildActivityIcon" Viewbox="0,0,52.706,14.497" ViewboxUnits="Absolute" Stretch="Uniform">
...
</DrawingBrush>
<DrawingBrush x:Key="ChildActivityIcon" Viewbox="0,0,52.706,14.497" ViewboxUnits="Absolute" Stretch="Uniform">
...
</DrawingBrush>
ConverterParameter
namentlich auf Ihr Designerprojekt verweist.
<a href="sap:ActivityDesigner.Icon">sap:ActivityDesigner.Icon</a>
<DrawingBrush Stretch="Uniform" Drawing="{Binding Path=ModelItem, Converter={StaticResource ActivityIconConverter}, ConverterParameter=pack://application:\)\),\)\),\)\),/MyCompany.MyProduct.Activities.Design;component/themes/icons.xaml}" />
</sap:ActivityDesigner.Icon>
<a href="sap:ActivityDesigner.Icon">sap:ActivityDesigner.Icon</a>
<DrawingBrush Stretch="Uniform" Drawing="{Binding Path=ModelItem, Converter={StaticResource ActivityIconConverter}, ConverterParameter=pack://application:\)\),\)\),\)\),/MyCompany.MyProduct.Activities.Design;component/themes/icons.xaml}" />
</sap:ActivityDesigner.Icon>
Hinzufügen von Komponenten
Sie haben jetzt die Grundlage für einen Designer, aber sie ist noch völlig leer! Wir erweitern diese Aktivität und fügen zwei Textfelder hinzu, eines für jede Eingabe der untergeordneten Aktivität.
ActivityDecoratorControl
hinzufügen. Visual Studio kann Sie auffordern, den UiPath.Shared.Activities.Design.Controls
-Namespace zu importieren, aber wenn nicht, fügen Sie dies auch zur Klassendefinition oben in der Datei hinzu.
<sap:ActivityDesigner x:Class="MyCompany.MyProduct.Activities.Design.ChildActivityDesigner"
...
xmlns:controls="clr-namespace:UiPath.Shared.Activities.Design.Controls">
<?comment-start?>
Resources
<?comment-end?>
<?comment-start?>
Icons
<?comment-end?>
<controls:ActivityDecoratorControl Style="{StaticResource ActivityDecoratorStyle}">
</controls:ActivityDecoratorControl>
</sap:ActivityDesigner>
<sap:ActivityDesigner x:Class="MyCompany.MyProduct.Activities.Design.ChildActivityDesigner"
...
xmlns:controls="clr-namespace:UiPath.Shared.Activities.Design.Controls">
<?comment-start?>
Resources
<?comment-end?>
<?comment-start?>
Icons
<?comment-end?>
<controls:ActivityDecoratorControl Style="{StaticResource ActivityDecoratorStyle}">
</controls:ActivityDecoratorControl>
</sap:ActivityDesigner>
ActivityDecoratorControl
werden, die Standardaktivitätsverhalten bietet, z. B. die Möglichkeit, einen großen Designer zu minimieren und die Meldung „Zum Anzeigen doppelklicken“ anzuzeigen. an dessen Stelle. Solche Details sind klein, aber zusammen geben sie dem gesamten Aktivitätspaket ein UiPath-Feeling.
Erstellen Sie Ihr Paket neu und Sie werden sehen, dass es jetzt etwas anders aussieht:
Als Nächstes legen wir das Layout der Aktivität so fest, dass Beschriftungen und Textfelder ansprechend angezeigt werden. WPF hat 6 Hauptlayouts, aber wir verwenden ein Rasterfeld für unsere Steuerelemente. Das Raster definiert zunächst eine Anzahl von Zeilen und Spalten sowie deren Höhe und Breite. Definieren Sie zunächst 2 Zeilen und 2 Spalten.
<controls:ActivityDecoratorControl Style="{StaticResource ActivityDecoratorStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
</Grid>
</controls:ActivityDecoratorControl>
<controls:ActivityDecoratorControl Style="{StaticResource ActivityDecoratorStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
</Grid>
</controls:ActivityDecoratorControl>
RowDefinition
-Höhen sind beide *
, sodass sie so viel vertikalen Platz wie vorhanden verbrauchen. Die ColumnDefinition
Breiten sind jedoch *
und 3*
, d. h. die erste Spalte verbraucht 25 % aller verfügbaren Leerzeichen entlang der Breite und die zweite Spalte 75 %.
Jetzt da das Layout festgelegt ist, fügen wir zwei Textfelder hinzu, mit denen der Benutzer auf die beiden Eingabeeigenschaften der untergeordneten Aktivität zugreifen kann – First Number und Zweite Zahl. Fügen Sie nach den Rasterdefinitionen für die erste Zahl eine Beschriftung hinzu.
Label
sind 3 Eigenschaften festgelegt:
- Raster.Zeile: Positioniert die Beschriftung in der ersten Zeile des oben definierten Rasters.
- Raster.Spalte: Positioniert die Beschriftung in der ersten Spalte des oben definierten Rasters.
- Inhalt: Legt den Text fest, der in der Beschriftung angezeigt wird.
<Grid>
<?comment-start?>
Grid definitions
<?comment-end?>
<Label Grid.Row="0" Grid.Column="0"
Content="First Number" />
</Grid>
<Grid>
<?comment-start?>
Grid definitions
<?comment-end?>
<Label Grid.Row="0" Grid.Column="0"
Content="First Number" />
</Grid>
Als Nächstes fügen wir „ ExpressionTextBox “ hinzu, um Benutzereingaben zu ermöglichen. Wenn Visual Studio Sie nicht dazu auffordert, müssen Sie der Klassendefinition manuell zwei weitere Namespaces hinzufügen.
xmlns:view="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation"
xmlns:system="clr-namespace:System;assembly=mscorlib"
xmlns:view="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation"
xmlns:system="clr-namespace:System;assembly=mscorlib"
ExpressionTextBox
sind 4 Eigenschaften festgelegt:
- Raster.Zeile: Positioniert die Beschriftung in der ersten Zeile des oben definierten Rasters.
- Raster.Spalte: Positioniert die Beschriftung in der zweiten Spalte des oben definierten Rasters.
- Hinweistext: Legt den Tooltip-Text fest, der innerhalb des Textfelds angezeigt wird, wenn es leer ist, und auch, wenn sich der Mauszeiger des Benutzers über dieses Feld bewegt.
-
Ausdruckstyp: Legt den Datentyp fest, der in diesem Feld zulässig ist. Da unsere Eigenschaft eine Zahl vom Typ
int
ist, ist dies aufInt32
festgelegt.<Grid> <?comment-start?> Grid definitions <?comment-end?> <Label Grid.Row="0" Grid.Column="0" Content="First Number" /> <view:ExpressionTextBox Grid.Row="0" Grid.Column="1" HintText="The first addend" ExpressionType="system:Int32" /> </Grid>
<Grid> <?comment-start?> Grid definitions <?comment-end?> <Label Grid.Row="0" Grid.Column="0" Content="First Number" /> <view:ExpressionTextBox Grid.Row="0" Grid.Column="1" HintText="The first addend" ExpressionType="system:Int32" /> </Grid>
Erstellen Sie Ihr Paket neu; es sollte nun folgendermaßen aussehen:
Label
und ExpressionTextBox
für die Eigenschaft Zweite Zahl hinzu und denken Sie daran, dass sich diese Steuerelemente jetzt in Grid.Row="1"
befinden. Das Endergebnis sollte folgendermaßen aussehen:
String
-Eingaben unterstützen, ermöglichen AusdrucksTextfelder dem Benutzer die Eingabe komplexer VB.NET-Ausdrücke (z. B Int32.MaxValue
, 2+2
, SomeUiPathVariable
) und können diesen Wert an eine Eigenschaft in Ihrer Aktivität binden.
ExpressionTextBox
2 weitere Eigenschaften hinzu:
- OwnerActivity : Gibt ein Ansichtsmodell an, das vom Designer zum Verknüpfen mit der Aktivitätsdatei verwendet wird. Für unsere Zwecke wird dies immer ModelItem sein.
- Ausdruck: Gibt die Aktivitätseigenschaft an, an die dieses Feld gebunden wird. Es gibt 4 Hauptkomponenten:
- Bindung: Gibt nach Name die Aktivitätseigenschaft an, an die gebunden werden soll. Wenn die
ModelItem
den Inhalt Ihrer Aktivität enthält, verlinktModelItem.FirstNumber
direkt auf die Eigenschaft „First Number“. - Konverter: Stellt eine Klasse zum Konvertieren zwischen Objekten verschiedener Typen bereit. In unserem Fall enthält das Designerfeld eine
int
, aber die Aktivitätseigenschaft ist vom TypInArgument<int>
, also fügen wir ein Standard-ArgumentToExpressionConverter
hinzu, um die Bindung zwischen ihnen zu behandeln. - KonverterParameter: Gibt den Typ des Arguments an, an das dieses Feld gebunden ist. In diesem Fall binden wir an
InArgument<>
-Eigenschaften, sodass der KonverterParameter aufIn
festgelegt ist, aberInOut
undOut
sind ebenfalls Optionen. - Modus: Gibt an, ob Änderungen im Designerfeld Aktualisierungen der Aktivitätseigenschaft auslösen und umgekehrt. Legen Sie dies als
TwoWay
, damit der Benutzer entweder den Designer oder den Eigenschaftenbereich aktualisieren kann. Alle anderen Optionen finden Sie hier.
ArgumentToExpressionConverter
, indem Sie ResourceDictionary
die folgende Zeile hinzufügen und den Namespace clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation
in Ihre Klassendefinition importieren.
<converters1:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" />
<converters1:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" />
Insgesamt sollten der Designer und Code Ihrer untergeordneten Aktivität wie folgt aussehen. Geben Sie Werte in jedes Feld ein und beachten Sie, wie die entsprechenden Eigenschaften aktualisiert werden.
<sap:ActivityDesigner x:Class="MyCompany.MyProduct.Activities.Design.ChildActivityDesigner"
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:converters="clr-namespace:UiPath.Shared.Activities.Design.Converters"
xmlns:converters1="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation"
xmlns:controls="clr-namespace:UiPath.Shared.Activities.Design.Controls"
xmlns:view="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation"
xmlns:system="clr-namespace:System;assembly=mscorlib">
<a href="sap:ActivityDesigner.Resources">sap:ActivityDesigner.Resources</a>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="..\)\)Themes\)\)Generic.xaml" />
</ResourceDictionary.MergedDictionaries>
<converters1:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" />
<converters:ActivityIconConverter x:Key="ActivityIconConverter" />
</ResourceDictionary>
</sap:ActivityDesigner.Resources>
<a href="sap:ActivityDesigner.Icon">sap:ActivityDesigner.Icon</a>
<DrawingBrush Stretch="Uniform" Drawing="{Binding Path=ModelItem, Converter={StaticResource ActivityIconConverter}, ConverterParameter=pack://application:\)\),\)\),\)\),/MyCompany.MyProduct.Activities.Design;component/themes/icons.xaml}" />
</sap:ActivityDesigner.Icon>
<controls:ActivityDecoratorControl Style="{StaticResource ActivityDecoratorStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0"
Content="First Number" />
<view:ExpressionTextBox Grid.Row="0" Grid.Column="1"
OwnerActivity="{Binding Path=ModelItem}"
ExpressionType="system:Int32"
HintText="The first addend"
Expression="{Binding Path=ModelItem.FirstNumber,Converter={StaticResource ArgumentToExpressionConverter}, ConverterParameter=In, Mode=TwoWay}" />
<Label Grid.Row="1" Grid.Column="0"
Content="Second Number" />
<view:ExpressionTextBox Grid.Row="1" Grid.Column="1"
OwnerActivity="{Binding Path=ModelItem}"
ExpressionType="system:Int32"
HintText="The second addend"
Expression="{Binding Path=ModelItem.SecondNumber,Converter={StaticResource ArgumentToExpressionConverter}, ConverterParameter=In, Mode=TwoWay}" />
</Grid>
</controls:ActivityDecoratorControl>
</sap:ActivityDesigner>
<sap:ActivityDesigner x:Class="MyCompany.MyProduct.Activities.Design.ChildActivityDesigner"
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:converters="clr-namespace:UiPath.Shared.Activities.Design.Converters"
xmlns:converters1="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation"
xmlns:controls="clr-namespace:UiPath.Shared.Activities.Design.Controls"
xmlns:view="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation"
xmlns:system="clr-namespace:System;assembly=mscorlib">
<a href="sap:ActivityDesigner.Resources">sap:ActivityDesigner.Resources</a>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="..\)\)Themes\)\)Generic.xaml" />
</ResourceDictionary.MergedDictionaries>
<converters1:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" />
<converters:ActivityIconConverter x:Key="ActivityIconConverter" />
</ResourceDictionary>
</sap:ActivityDesigner.Resources>
<a href="sap:ActivityDesigner.Icon">sap:ActivityDesigner.Icon</a>
<DrawingBrush Stretch="Uniform" Drawing="{Binding Path=ModelItem, Converter={StaticResource ActivityIconConverter}, ConverterParameter=pack://application:\)\),\)\),\)\),/MyCompany.MyProduct.Activities.Design;component/themes/icons.xaml}" />
</sap:ActivityDesigner.Icon>
<controls:ActivityDecoratorControl Style="{StaticResource ActivityDecoratorStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0"
Content="First Number" />
<view:ExpressionTextBox Grid.Row="0" Grid.Column="1"
OwnerActivity="{Binding Path=ModelItem}"
ExpressionType="system:Int32"
HintText="The first addend"
Expression="{Binding Path=ModelItem.FirstNumber,Converter={StaticResource ArgumentToExpressionConverter}, ConverterParameter=In, Mode=TwoWay}" />
<Label Grid.Row="1" Grid.Column="0"
Content="Second Number" />
<view:ExpressionTextBox Grid.Row="1" Grid.Column="1"
OwnerActivity="{Binding Path=ModelItem}"
ExpressionType="system:Int32"
HintText="The second addend"
Expression="{Binding Path=ModelItem.SecondNumber,Converter={StaticResource ArgumentToExpressionConverter}, ConverterParameter=In, Mode=TwoWay}" />
</Grid>
</controls:ActivityDecoratorControl>
</sap:ActivityDesigner>