...
Code Block |
---|
<Row> <Label Content="Geschlecht" /> <RadioButton Id="DocParam.RBGeschlecht" Value="1" Label="Frau" /> <RadioButton Id="DocParam.RBGeschlecht" Value="2" Label="Mann" /> </Row> |
...
Expand
In diesem Fall wird der RadioButton im ComboBox-Element gespeichert. Der Value in der ComboBox muss dabei der Value im RadioButton in der View entsprechen. Diese Variante ist geeignet, wenn der Wert im Dokument ausgegeben werden soll, da die Anzeige im Dokument über den Value des ComboBoxNode-Eintrags gesteuert wird. Falls ein RadioButton vorausgewählt sein soll, muss der Value des entsprechenden RadioButtons im SelectedValue
-Attribut der ComboBoxNode konfiguriert werden.
ComboBoxNode in der DataNode-Section:
Code Block |
---|
<DataNodes>
<ComboBox Id="DocParam.RBGeschlecht" SelectedValue="2">
<ListItem Value="1" DisplayText="Frau" />
<ListItem Value="2" DisplayText="Mann" />
</ComboBox>
</DataNodes>
|
In der View:
Code Block |
---|
<Row> <Label Content="Geschlecht" /> <RadioButton Id="DocParam.RBGender" Value="1" Label="Frau" /> <RadioButton Id="DocParam.RBGender" Value="2" Label="Mann" /> </Row> |
...
Beispiel zur Veranschaulichung der Spalten:
Konfiguration:
Code Block | ||
---|---|---|
| ||
<View Id="main" Label="Startseite"> <Row> <TextBlock Style="h1" ColumnSpan="4">Beispiel-Dokument-Parameter-View</TextBlock> </Row> <Row> <Separator ColumnSpan="4"/> </Row> <Row> <Label Content="Betreff" /> <TextBox Id="DocParam.Subject" ColumnSpan="3" /> </Row> <Row> <Label Content="Datum" /> <DatePicker Id="DocParam.DateOfWriting" ColumnSpan="3" /> </Row> <Row> <CheckBox Id="DocParam.IsConfidential" Label="Vertraulich" ColumnOffset="1" ColumnSpan="3" /> </Row> <Row> <Label Content="Gratulationsgrund (1)" /> <ComboBox Id="DocParam.ReasonForCongratulation1" /> </Row> <Row> <Label Content="Gratulationsgrund (2)" /> <RadioButton Id="DocParam.ReasonForCongratulation2" Value="birthday" Label="Geburtstag" /> <RadioButton Id="DocParam.ReasonForCongratulation2" Value="employee anniversary" Label="Mitarbeiterjubiläum" /> <RadioButton Id="DocParam.ReasonForCongratulation2" Value="mother-/fatherhood" Label="Mutter-/Vaterschaft" /> </Row> <Row> <Separator /> </Row> <Button Type="Submit" Label="OK" IsDefault="true" /> <Button Type="Cancel" Label="Abbrechen" /> </View> |
Resultat (Spalten wurden markiert):
...
Validierung
Benutzereingaben können, wie erwähnt, validiert werden. Wenn eines oder mehrere Felder dementsprechend markiert werden, kann der Benutzer den Dokument-Parameter-Dialog nicht verlassen, bevor er die Bedingungen erfüllt hat.
Übersicht über alle Validierungsmöglichkeiten:
DataNode-Elemente
"Text": mit
Required
oderRegex
"CheckBox": mit
Required
Formularelemente
"ComboBox": mit
IsInvalidWhenValue
"RadioButton": bei Verknüpfung mit Text-Element mit
Required
. Mittels AttributShowRequiredIncicator
wird bestimmt, wo das Warnhinweis-Icon angezeigt werden soll.
Beispiel/Aussehen des Dialoges:
...
Beispiel/Konfiguration:
Code Block | ||
---|---|---|
| ||
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
<CustomContentSection Name="Dokument-Parameter" WindowWidth="750" WindowHeight="450">
<DataNodes>
<Text Id="DocParam.TextRequired" Required="true" ValidationMessage="Bitte Feld nicht leer lassen" />
<Text Id="DocParam.TextRegexOnlyDigits" Regex="^[0-9]*$" ValidationMessage="Bitte nur Ziffern eingeben">Abc</Text>
<CheckBox Id="DocParam.CheckBoxRequired" Required="true" Tooltip="CheckBox muss zwingend angekreuzt sein" />
<Text Id="DocParam.ComboBoxInViewNotOption1" Tooltip="Bitte nicht Option 1 anwählen">option1</Text>
<ComboBox Id="DocParam.ComboBoxInDataNodesNotOption1" SelectedValue="option1" Tooltip="Bitte nicht Option 1 anwählen">
<Item DisplayText="Option 1" Value="option1" />
<Item DisplayText="Option 2" Value="option2" />
<Item DisplayText="Option 3" Value="option3" />
</ComboBox>
<Text Id="DocParam.RadioButtonRequired" Required="true" />
</DataNodes>
</CustomContentSection>
<Views IsDebug="false">
<View Id="main" Label="Startseite">
<Row>
<TextBlock Style="h1" ColumnSpan="4">Validierungsbeispiel</TextBlock>
</Row>
<Row>
<Separator ColumnSpan="4"/>
</Row>
<Row>
<Label ColumnSpan="2" Content="Textfeld, darf nicht leer sein" />
<TextBox Id="DocParam.TextRequired" ColumnSpan="2" />
</Row>
<Row>
<Label ColumnSpan="2" Content="Textfeld, darf nur Ziffern enthalten" />
<TextBox Id="DocParam.TextRegexOnlyDigits" ColumnSpan="2" />
</Row>
<Row>
<Label ColumnSpan="2" Content="CheckBox, muss angekreuzt sein" />
<CheckBox Id="DocParam.CheckBoxRequired" Label="CheckBox" />
</Row>
<Row>
<Label ColumnSpan="2" Content="ComboBox, Option 1 darf nicht gewählt sein" />
<ComboBox Id="DocParam.ComboBoxInViewNotOption1" IsInvalidWhenValue="option1">
<Item Label="Option 1" Value="option1" />
<Item Label="Option 2" Value="option2" />
<Item Label="Option 3" Value="option3" />
</ComboBox>
</Row>
<Row>
<Label ColumnSpan="2" Content="ComboBox, Option 1 darf nicht gewählt sein" />
<ComboBox Id="DocParam.ComboBoxInDataNodesNotOption1" IsInvalidWhenValue="option1" />
</Row>
<Row>
<Label ColumnSpan="2" Content="RadioButtons, es muss eine Option gewählt werden" />
<RadioButton Id="DocParam.RadioButtonRequired" Value="option1" Label="Option 1" />
<RadioButton Id="DocParam.RadioButtonRequired" Value="option2" Label="Option 2" ShowRequiredIndicator="true" ToolTip="Bitte eine Option wählen" />
</Row>
<Button Type="Submit" Label="OK" IsDefault="true" />
<Button Type="Cancel" Label="Abbrechen" />
</View>
</Views>
</Configuration> |
...
Bindings
Simple Bindings
Bindings beziehen sich auf andere Werte und können diese als "Wert-Grundlage" und für Abfragen nutzen. Über Bindings können folgende Attribute gesteuert werden:
Mögliche Attribute | Beschreibung |
---|---|
IsEnabled | Gilt für alle Elemente. Definiert, ob das Feld benutzt werden darf (Text erfassen in einer Textbox, CheckBox anklicken, aus einer ComboBox etwas auswählen etc.) |
IsVisible | Gilt für alle Elemente. Definiert, ob ein Feld sichtbar ist. |
Value | Gilt für alle Elemente, die einen Wert vorweisen, also nicht für Buttons. Indem man es "bindet", kann ein Wert eines Feldes auf ein anderes Feld übertragen werden. |
TargetView | Wird bei Buttons eingesetzt zum zur nächsten View zu gelangen. |
IsVisible-Beispiel:
Code Block |
---|
<Button Bind="IsVisible: $('DocParam.Erweitert') != 'true'" TargetView="Final" Label=">" />
<Button Bind="IsVisible: $('DocParam.Erweitert') == 'true'" TargetView="Notizen" Label="Notizen >" /> |
Der Button mit der Bezeichnung "Notizen >" wird nur im Dokument-Parameter angezeigt, wenn es einen Wert "DocParam.Erweitert" = "true" (also eine aktivierte CheckBox) gibt. IsEnabled funktioniert gleich.
TargetView-Beispiel:
Code Block | ||
---|---|---|
| ||
<Button Bind="TargetView: $('DocParam.Type')" /> |
Value-Bind-Beispiel:
Werte können auch an Controls gebunden werden um z. B. bei der letzten Seite eine Übersicht der eingegeben Daten anzuzeigen:
Code Block | ||
---|---|---|
| ||
<Row>
<Label Content="Notizen aktiv:" />
<CheckBox IsEnabled="false" ColumnSpan="3" Bind="Value: $('DocParam.Erweitert')" />
</Row>
<Row>
<Label Content="Notizen:" />
<TextBlock IsEnabled="false" ColumnSpan="3" Bind="Value: $('DocParam.Notizen')" />
</Row>
<Row>
<TextBlock>Number Input:</TextBlock>
<TextBox Id="NumberTest" />
<TextBlock>Number Output:</TextBlock>
<TextBlock Bind="IsVisible: $('NumberTest') >= 100">EQUAL OR OVER 100!</TextBlock>
<TextBlock Bind="IsVisible: $('NumberTest') < 100">BELOW 100!</TextBlock>
</Row>
<Row>
<TextBlock>Number with Combine:</TextBlock>
<TextBox Id="NumberTestA" />
<TextBox Id="NumberTestB" />
</Row>
<Row>
<TextBlock>Output:</TextBlock>
<TextBlock Bind="IsVisible: $('NumberTestA') > 100 && $('NumberTestB') > 100">Both are over 100!</TextBlock>
<TextBlock Bind="IsVisible: $('NumberTestA') > 100 || $('NumberTestB') > 100">One Is over 100!</TextBlock>
</Row> |
Anstatt einzelne Elemente können auch ganze Rows gebindet werden:
Row-Beispiel:
Code Block |
---|
<Row Bind="IsVisible: $('DocParam.Erweitert') == 'true'">
<TextBlock>Nur sichtbar wenn die CheckBox mit Id "DocParam.Erweitert" aktiviert ist.</TextBlock>
</Row> |
Vergleichsoperatoren der Bindings:
Operator | Beschreibung |
---|---|
| ungleich, gilt für Text und Zahlen. |
| gleich, gilt für Text und Zahlen |
| grösser als (XML-Attribute erlauben keine < oder >, daher muss |
| grösser oder gleich |
| kleiner als |
| kleiner oder gleich |
Mehrere Bedingungen können mit UND oder ODER verknüpft werden:
||
für ODER&&
für UND (steht für &&) (XML-Attribute erlauben keine "&", daher muss&
verwendet werden)
Es können auch mehrere Bindings mit einem ,
getrennt angegeben werden:
Code Block | ||
---|---|---|
| ||
<TextBlock ColumnSpan="4" Bind="Value: $('DocParam.Notizen'), IsEnabled: 'false'" /> |
...
Calc": Berechnungen in Bindings
Die Wertgrundlagen für die Bindings können mit mathematischen Funktionen erweitert werden. Das Ansprechen der Felder bleibt dabei gleich ($('DocParam.Xyz')
). Um die Felder mathematisch miteinander zu verknüpfen, können die normalen Basisoperatorn (+
, -
, /
, *
) verwendet werden.
Übersicht über alle möglichen Operatoren und wie sie verwendet werden:
Operator | Beschreibung |
---|---|
Basis-Operatoren wie | |
Standard-Funktionen wie Quadratwurzel, sin, tan, cos, etc. | |
| |
Weitere Funktionen |
|
Jeder Calc-Aufruf enthält als abschliessendes Argument den Formatierungs-String, vom Term separiert durch ein ;
. Dieser Wert kann weggelassen werden (die umschliessenden ''
jedoch nicht). Das ;
ist zwingend.
Formatierung:
N2 → Zahl mit zwei Nachkommastellen (Standard)
C2 → Währungsformat entsprechend der aktuell ausgewählten Dokumentsprache mit zwei Nachkommastellen
Komplette Liste mit Formatierungscodes: https://docs.microsoft.com/de-de/dotnet/standard/base-types/standard-numeric-format-strings
Syntax:
Code Block |
---|
Calc('Term';'Format')
Calc('$('DocParam.Field1') + $('DocParam.Field2')';'')
Calc('$('DocParam.Field1') + ($('DocParam.Field2') * $('DocParam.Field2'))';'C2') |
Panel | ||||||
---|---|---|---|---|---|---|
| ||||||
ACHTUNG Nach dem |
Die verwendete Library ist fähig, Exponent-vor-Punkt-vor-Strich zu rechnen. → ( a + b * c) == (a + (b * c)) != ((a + b ) * c)
. Beim Calc
-Schlüsselwort spielt die Gross- und Kleinschreibung keine Rolle.
Beispiele
Value-Bind:
Code Block | ||
---|---|---|
| ||
<Row>
<Label Content="Addition" />
<TextBox Id="DocParam.OutputAdd" ColumnSpan="3" Bind="Value: Calc('$('DocParam.Field1') + $('DocParam.Field2')';'C2')" />
</Row> |
IsVisible-Bind:
Code Block |
---|
<Row>
<Label Content="IsVisible" />
<TextBox Id="DocParam.OutputSubtract" ColumnSpan="3" Bind="IsVisible: Calc('$('DocParam.Field1') - $('DocParam.Field2')';'C2') == 'CHF 20.00'" />
</Row>
<Row>
<Label Content="IsVisible" />
<TextBox Id="DocParam.OutputSubtract" ColumnSpan="3" Bind="IsVisible: Calc('$('DocParam.Field1') - $('DocParam.Field2')';'') == '20.00'" />
</Row> |
Weiter bietet Calc die Möglichkeit, angewählte CheckBoxen zu "zählen":
Code Block |
---|
<Row Bind="IsVisible: Calc('$('Checkbox1') + $('Checkbox2') + $('Checkbox3') + $('Checkbox4')';'F0') == '2'">
<Label Content="Label">
</Row> |
Der bool'sche "Checked"-Value der Checkbox wird von Calc in einen Integer mit Wert 0 für false (= nicht angewählt) und 1 für true (= angewählt) umgewandelt, sodass die Werte zusammengerechnet werden können. Das obige Beispiel steht für: "Wenn zwei der Checkboxen 1 bis 4 angewählt sind, dann zeige die Row mit dem Label an." Dabei muss auf die Formatierung geachtet werden: Zwingend ohne Kommastellen, denn 1.00
ist nicht gleich 1
, und kann dementsprechend nicht in einen bool'schen Wert zurückgewandelt werden.
Sofern keine Standardwerte in den DataNode-Elementen vorgegeben sind, werden alle Calc-Binding-Werte mit 0
initialisiert. Insbesondere bei "IsEnabled"- und "IsVisible"-Bindings mit "Calc"-Bedingungen sollte man auf valide Standardwerte achten, ansonsten ist die Bedingung initial immer erfüllt.
...
Script – JavaScript
Für Anforderungen, die mit den üblichen Konfigurationen nicht abgedeckt werden können, bietet die Dokument-Parameter-Dokumentfunktion die Möglichkeit, JavaScript zu schreiben.
Grundaufbau mit JavaScript
Das Script
-Element wird an folgender Stelle eingefügt:
Code Block |
---|
<Configuration>
<CustomContentSection [...]>
<DataNodes>
[...]
</DataNodes>
</CustomContentSection>
<Views>
<Script>
<![CDATA[
// Hier kann JavaScript geschrieben werden.
]]>
</Script>
<View>
[...]
</View>
</Views>
</Configuration> |
JavaScript-Beispiel
Komplettes Beispiel, das die Möglichkeiten der JavaScript-Integration aufzeigt:
Code Block |
---|
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
<CustomContentSection Name="Dokument-Parameter" WindowWidth="750" WindowHeight="450">
<DataNodes>
<Text Id="DocParam.TextFieldMustContainTest">Etwas</Text>
<Text Id="DocParam.TextFieldInput">Zwölf Boxkämpfer jagen Viktor quer über den großen Sylter Deich.</Text>
<Text Id="DocParam.TextFieldResultUpperCase" />
<Text Id="DocParam.TextFieldResultLowerCase" />
</DataNodes>
</CustomContentSection>
<Views OnSubmit="validate()">
<Script>
<![CDATA[
function validate() {
var textFieldContainsTest = OO.getValue("DocParam.TextFieldMustContainTest") === "Test";
if (textFieldContainsTest === false) {
OO.addValidationMessage("DocParam.TextFieldMustContainTest", "Textfeld 1 muss 'Test' sein und nicht '" + OO.getValue("DocParam.TextFieldMustContainTest") + "'");
return false;
}
return true;
}
function textFieldInputChanged() {
var textOfTextField = OO.getValue("DocParam.TextFieldInput");
var textInUpperCase = textOfTextField.toUpperCase();
OO.setValue("DocParam.TextFieldResultUpperCase", textInUpperCase);
var textInLowerCase = textOfTextField.toLowerCase();
OO.setValue("DocParam.TextFieldResultLowerCase", textInLowerCase);
}
]]>
</Script>
<View Id="main" Label="Startseite">
<Row>
<TextBlock Style="h1" ColumnSpan="4">JavaScript-Beispiel</TextBlock>
</Row>
<Row>
<Separator ColumnSpan="4"/>
</Row>
<Row>
<Label Content="Muss "Text" enthalten" />
<TextBox Id="DocParam.TextFieldMustContainTest" ColumnSpan="3" />
</Row>
<Row>
<Separator ColumnSpan="4"/>
</Row>
<Row>
<Label Content="Eingabe" />
<TextBox Id="DocParam.TextFieldInput" ColumnSpan="3" OnChange="textFieldInputChanged()" />
</Row>
<Row>
<Label Content="Ausgabe in Grossbuchstaben" />
<TextBox Id="DocParam.TextFieldResultUpperCase" ColumnSpan="3" IsEnabled="false" />
</Row>
<Row>
<Label Content="Ausgabe in Kleinbuchstaben" />
<TextBox Id="DocParam.TextFieldResultLowerCase" ColumnSpan="3" IsEnabled="false" />
</Row>
<Button Type="Submit" Label="OK" IsDefault="true" />
<Button Type="Cancel" Label="Abbrechen" />
</View>
</Views>
</Configuration> |
Innerhalb des Script
-Elements können JavaScript-Funktionen definiert werden. Erlaubt ist gültiges ECMAScript 5.1.
Für die Verwendung dieses Features sind JavaScript-Kenntnisse vorausgesetzt. Die Grundlagen von JavaScript sind in dieser Dokumentation nicht aufgeführt.
Für den Aufruf der Funktionen gibt es zwei Möglichkeiten:
Über das
OnSubmit
-Attribut auf demViews
-Element (siehe Beispiel oben)
Bei diesen Funktionen muss entwedertrue
oderfalse
zurückgegeben werden:true
: Kein Validierungsfehler = Dokument-Parameter-Dialog wird verlassenfalse
: Validierungsfehler, Validierungsübersicht wird angezeigt = Dokument-Parameter-Dialog bleibt offen
Über das
OnChange
-Attribut auf einem View-Wert-Control (z. B. auf einemTextBox
-Control; siehe Beispiel oben)
Bei diesen Funktionen ist kein Rückgabewert nötig.
Für die Interaktion mit DataNode-Elementen kann das OO
-Objekt wie folgt verwendet werden:
OO.getValue("ANY_ID")
: Gibt den Text-Wert des DataNode-Elements mit der entsprechenden Id zurück. Beispiel:var valueFromExampleDocParam = OO.getValue("DocParam.Example");
OO.setValue("ANY_ID", "ANY_VALUE")
: Setzt den Text-Wert des DataNode-Elements mit der entsprechenden Id. Beispiel:OO.setValue("DocParam.Example", "Neuer Inhalt...");
OO.addValidationMessage("ANY_ID", "ANY_VALIDATION_MESSAGE")
: Setzt einen Validierungsfehler mit einer Nachricht für das DataNode-Element mit der entsprechenden Id. Hinweis: Alle Validierungsnachrichten werden in der Validierungsübersicht angezeigt. Wenn ein Element mit der angegebenen ID gefunden wird, wird ein Fehlerhinweis angezeigt. Beispiel:OO.addValidationMessage("DocParam.Example", "Wenn X und Y gesetzt wurden, muss im Beispielfeld etwas eingegeben werden.");
...
DataSources
Das DataSources-Feature ist auf dieser Seite dokumentiert.
...
Beispiele über alle Themen auf dieser Seite
Einfacher Dokument-Parameter-Dialog:
Konfiguration eines einfachen Dokument-Parameter-Dialoges:
Code Block | ||
---|---|---|
| ||
<Configuration>
<CustomContentSection Name="Dokument-Parameter" WindowWidth="750" WindowHeight="750">
<DataNodes>
<Text Id="DocParam.Subject" />
<DateTime Id="DocParam.CreationTime" Format="d. MMMM yyyy" />
<CheckBox Id="DocParam.CheckBox1" />
<ComboBox Id="DocParam.ComboBox1" SelectedValue="default">
<Item DisplayText="Option 1" Value="opt1" />
<Item DisplayText="Option 2" Value="opt2" />
<Item DisplayText="Option 3" Value="opt3" />
</ComboBox>
<Text Id="DocParam.TextNodeForRadio" />
<ComboBox Id="DocParam.ComboBoxForRadio">
<Item DisplayText="Option 1" Value="opt1" />
<Item DisplayText="Option 2" Value="opt2" />
<Item DisplayText="Option 3" Value="opt3" />
</ComboBox>
</DataNodes>
</CustomContentSection>
<Views IsDebug="false">
<View Id="main" Label="Startseite">
<Row>
<TextBlock Style="h1" ColumnSpan="4">Titel</TextBlock>
</Row>
<Row>
<Separator ColumnSpan="4" />
</Row>
<Row>
<Label Content="Betreff" />
<TextBox Id="DocParam.Subject" ColumnSpan="3" />
</Row>
<Row>
<Label Content="Datum" />
<DatePicker Id="DocParam.CreationTime" ColumnSpan="3" />
</Row>
<Row>
<CheckBox Id="DocParam.CheckBox1" Label="CheckBox mit ColumnOffset=1" ColumnOffset="1" ColumnSpan="2" />
</Row>
<Row>
<Label Content="das ist eine Combobox" ColumnSpan="1" />
<ComboBox Id="DocParam.ComboBox1" ColumnSpan="2" />
</Row>
<Row>
<Label Content="RadioButton Basierend auf einem TextNode" ColumnSpan="4"></Label>
</Row>
<Row>
<Separator ColumnSpan="4" />
</Row>
<Row>
<!-- Konfiguration eines RadioButton über ein DataNode-Element vom Typ Text. Wenn das DataNode-Element vom Typ Text im Dokument verwendet wird, dann wird der Value der ausgewählten Option eingefügt. Die anderen Optionen können im Dokument nicht mehr angewählt werden, nur über den Dokument-Parameter-Dialog. -->
<RadioButton Id="DocParam.TextNodeForRadio" Value="opt1" Label="Option 1" />
<RadioButton Id="DocParam.TextNodeForRadio" Value="opt2" Label="Option 2" />
<RadioButton Id="DocParam.TextNodeForRadio" Value="opt3" Label="Option 3" />
</Row>
<Row>
<!-- Fügt eine leere Row ein, kann so verwendet werden, um Elemente optisch besser zu trennen. -->
<TextBlock />
</Row>
<Row>
<Label Content="RadioButton basierend auf einem ComboBoxNode" ColumnSpan="4" />
</Row>
<Row>
<Separator ColumnSpan="4" />
</Row>
<Row>
<!-- Konfiguration eines RadioButton über ein DataNode-Element vom Typ ComboBox. Wenn das DataNode-Element vom Typ ComboBox im Dokument verwendet wird, wird das Label der ausgewählten Option angezeigt. Die anderen Optionen können über die ComboBox von Word weiterhin angewählt werden. -->
<RadioButton Id="DocParam.ComboBoxForRadio" Value="opt1" Label="Option 1" />
<RadioButton Id="DocParam.ComboBoxForRadio" Value="opt2" Label="Option 2" />
<RadioButton Id="DocParam.ComboBoxForRadio" Value="opt3" Label="Option 3" />
</Row>
<Button Type="Submit" Label="OK" IsDefault="true" />
<Button Type="Cancel" Label="Abbrechen" />
</View>
</Views>
</Configuration> |
Der dazugehörige Dialog:
...
Validierung:
Code Block |
---|
<Configuration>
<CustomContentSection Name="Dokument-Parameter" WindowWidth="750" WindowHeight="750">
<DataNodes>
<Text Id="DocParam.Subject" Required="true" ValidationMessage="Bitte geben sie einen Betreff ein" />
<Text Id="DocParam.4NumbersMax" Regex="^[0-9]{1,4}$" ValidationMessage="Die Zahl darf maximal aus vier Ziffern bestehen und muss natürlich sein" />
</DataNodes>
</CustomContentSection>
<Views>
<View Id="main" Label="Startseite">
<Row>
<TextBlock Style="h1" ColumnSpan="4">Titel</TextBlock>
</Row>
<Row>
<Separator ColumnSpan="4"/>
</Row>
<Row>
<Label Content="Betreff" />
<TextBox Id="DocParam.Subject" ColumnSpan="3" />
</Row>
<Row>
<Label Content="Maximal Vierstellige, natürlich Zahl" />
<TextBox Id="DocParam.4NumbersMax" ColumnSpan="3" />
</Row>
<Button Type="Submit" Label="OK" IsDefault="true" />
<Button Type="Cancel" Label="Abbrechen" />
</View>
</Views>
</Configuration> |
Verhalten des Dialoges:
...
Simple Bindings:
Code Block | ||
---|---|---|
| ||
<Configuration>
<CustomContentSection Name="Dokument-Parameter" WindowWidth="750" WindowHeight="750">
<DataNodes>
<CheckBox Id="DocParam.Checkbox1" />
<Text Id="DocParam.TextNode1" />
</DataNodes>
</CustomContentSection>
<Views>
<View Id="main" Label="Startseite">
<Row>
<TextBlock Style="h1" ColumnSpan="4">Titel</TextBlock>
</Row>
<Row>
<Separator ColumnSpan="4"/>
</Row>
<Row>
<Label Content="Name für CustomLabel"></Label>
<TextBox Id="DocParam.TextNode1"></TextBox>
</Row>
<Row>
<CheckBox Id="DocParam.Checkbox1" Label="Zeige CustomLabel"></CheckBox>
</Row>
<Row>
<Label Content="CustomLabel: " Bind="IsVisible: $('DocParam.Checkbox1')"></Label>
<!-- Einfaches, Doppeltes Binding mit einer Bedingung pro gebindetem Attrbut (isVisible, Value) -->
<TextBlock Bind="IsVisible: $('DocParam.Checkbox1'), Value: $('DocParam.TextNode1')"></TextBlock>
</Row>
<!-- Einfaches Value Binding -->
<Row Bind="IsVisible: $('DocParam.TextNode1') == 'Hello'">
<TextBlock>CustomLabel hat den Wert 'hello'</TextBlock>
</Row>
<!-- IsVisible-Binding mit einer UND Bedingung (&& → && ) -->
<Row Bind="IsVisible: $('DocParam.Checkbox1') && $('DocParam.TextNode1') == 'Hello'">
<TextBlock Value="">CustomLabel ist sichtbar UND hat den Wert 'Hello'</TextBlock>
</Row>
<!-- IsVisible-Binding mit einer ODER Bedingung -->
<Row Bind="IsVisible: $('DocParam.Checkbox1') || $('DocParam.TextNode1') == 'hello'">
<TextBlock>CustomLabel ist sichtbar ODER hat den Wert 'hello'</TextBlock>
</Row>
<Button Type="Submit" Label="OK" IsDefault="true" />
<Button Type="Cancel" Label="Abbrechen" />
</View>
</Views>
</Configuration> |
Das Verhalten des Dialoges:
...
Bindings: Calc
Code Block |
---|
<Configuration>
<CustomContentSection Name="Dokument-Parameter" WindowWidth="750" WindowHeight="750">
<DataNodes>
<!-- Eingabefelder für die mathematischen Funktionen mit validen Standardwerten -->
<Text Id="DocParam.Field1">1</Text>
<Text Id="DocParam.Field2">1</Text>
<Text Id="DocParam.TestNode2" />
<Text Id="DocParam.OutputAdd" />
<Text Id="DocParam.OutputSubtract" />
<Text Id="DocParam.OutputDivide" />
<Text Id="DocParam.OutputMultiply" />
<Text Id="DocParam.CB1" />
<Text Id="DocParam.CB2" />
<Text Id="DocParam.CB3" />
<Text Id="DocParam.CB4" />
</DataNodes>
</CustomContentSection>
<Views>
<View Id="main" Label="Startseite">
<Row>
<TextBlock Style="h1" ColumnSpan="4">Titel</TextBlock>
</Row>
<Row>
<Separator ColumnSpan="4"/>
</Row>
<Row>
<Label Content="Wert 1" />
<TextBox Id="DocParam.Field1" ColumnSpan="3"/>
</Row>
<Row>
<Label Content="Wert 2" />
<TextBox Id="DocParam.Field2" ColumnSpan="3" />
</Row>
<Row Bind="IsVisible: Calc('$('DocParam.Field1') + $('DocParam.Field2') > 1000';'F0') ">
<TextBlock>Wert1 + Wert2 Ergeben mehr als 1000</TextBlock>
</Row>
<Row>
<Label Content="Ergebnis Addition" />
<!-- Simples CalcBinding mit Addition und Formatierung auf zwei Nachkomastellen im Währungsformat -->
<TextBox Id="DocParam.OutputAdd" ColumnSpan="3" Bind="Value: Calc('$('DocParam.Field1') + $('DocParam.Field2')';'C2')" />
</Row>
<Row>
<Label Content="Ergebnis Subtraktion" />
<!-- Simples CalcBinding mit Subtraktion und Formatierung auf zwei Nachkomastellen im Währungsformat -->
<TextBox Id="DocParam.OutputSubtract" ColumnSpan="3" Bind="Value: Calc('$('DocParam.Field1') - $('DocParam.Field2')';'C2')" />
</Row>
<Row>
<Label Content="Ergebnis Division" />
<!-- Simples CalcBinding mit Divison und Formatierung auf drei Nachkomastellen im Dezimalformat -->
<TextBox Id="DocParam.OutputDivide" ColumnSpan="3" Bind="Value: Calc('$('DocParam.Field1') / $('DocParam.Field2')';'F3')" />
</Row>
<Row>
<Label Content="Ergebnis Multiplikation" />
<!-- Simples CalcBinding mit Multiplikation und Formatierung auf zwei Nachkomastellen im Währungsformat -->
<TextBox Id="DocParam.Outputmultiply" ColumnSpan="3" Bind="Value: Calc('$('DocParam.Field1') * $('DocParam.Field2')';'C2')" />
</Row>
<Row>
<CheckBox Id="DocParam.CB1" Label="CB1"></CheckBox>
<CheckBox Id="DocParam.CB2" Label="CB2"></CheckBox>
<CheckBox Id="DocParam.CB3" Label="CB3"></CheckBox>
<CheckBox Id="DocParam.CB4" Label="CB4"></CheckBox>
</Row>
<!-- Calc Binding um angewählte Checkboxen zu "zählen" -->
<Row Bind="IsVisible: Calc('$('DocParam.CB1') + $('DocParam.CB2') + $('DocParam.CB3') + $('DocParam.CB4')';'F0') == '1'">
<Label Content="Eine Checkbox angewählt"></Label>
</Row>
<Row Bind="IsVisible: Calc('$('DocParam.CB1') + $('DocParam.CB2') + $('DocParam.CB3') + $('DocParam.CB4')';'F0') == '2'">
<Label Content="Zwei Checkboxen angewählt"></Label>
</Row>
<Row Bind="IsVisible: Calc('$('DocParam.CB1') + $('DocParam.CB2') + $('DocParam.CB3') + $('DocParam.CB4')';'F0') == 3">
<Label Content="Drei Checkboxen angewählt"></Label>
</Row>
<Row Bind="IsVisible: Calc('$('DocParam.CB1') + $('DocParam.CB2') + $('DocParam.CB3') + $('DocParam.CB4')';'F0') == 4">
<Label Content="Vier Checkboxen angewählt"></Label>
</Row>
<Button Type="Submit" Label="OK" IsDefault="true" />
<Button Type="Cancel" Label="Abbrechen" />
</View>
</Views>
</Configuration> |
Verhalten des Dialoges:
...