- Versionshinweise
- Überblick
- Erste Schritte
- UiPath-Marktplatzanbieter
- Marketplace-Kunden
- Veröffentlichungsrichtlinien
- Veröffentlichungsrichtlinien für sofort einsatzbereite Automatisierungen
- 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 nur mit der Aktivitätsdefinitionsdatei erstellt werden, aber die Benutzererfahrung wird fast immer durch Hinzufügen eines Designers oder einer Benutzeroberfläche verbessert. Designer sind in XAML geschrieben, einer XML-basierten Sprache (weitere Details finden Sie hier) und werden verwendet, um Front-Ends für Windows Presentation Foundation (WPF)-Anwendungen zu erstellen.
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 und zusätzliche Namespaces importiert werden. In diesem Beispiel wird die ActivityDesigner -Klasse erweitert, 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 verfügbar gemacht 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:
Legen wir als Nächstes das Layout der Aktivität fest, sodass Beschriftungen und Textfelder ansprechend angezeigt werden können. WPF hat 6 Hauptlayouts, aber wir werden ein Rasterfenster verwenden, um unsere Steuerelemente zu enthalten. Das Raster funktioniert, indem zuerst eine Anzahl von Zeilen und Spalten zusammen mit deren Höhen und Breiten definiert wird. Beginnen Sie mit der Definition von 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 %.
Da das Layout nun festgelegt ist, fügen wir zwei Textfelder hinzu, mit denen der Benutzer auf die beiden Eingabeeigenschaften der untergeordneten Aktivität zugreifen kann – Erste Zahl und Zweite Zahl. Fügen Sie zunächst eine Beschriftung nach den Rasterdefinitionen für die erste Zahl 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 ein Ausdruckstextfeld ( 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 ist dies immer ModelItem.
- 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 oder die 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>