> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/powershell-universal/de/portal/portal-widgets/syntax.md).

# Syntax

Lernen Sie die PSBlazor-Syntax kennen, die in PowerShell Universal verwendet wird, um Komponenten, Attribute, Event-Callbacks und Datenbindung für Portal-Widgets zu definieren.

PSBlazor ist eine benutzerdefinierte Syntax, die auf Blazor und Razor Pages basiert. Sie ähnelt XML oder XAML und bietet einen Mechanismus, um eine Benutzeroberfläche deklarativ zu definieren.

## Komponenten

Jede Komponente wird mit einem XML-Knoten definiert, wie zum Beispiel `<Button>` oder `<Text>`. Jede Komponente verfügt über eigene Attribute, mit denen das Verhalten sowie das Aussehen und Verhalten des Widgets angepasst werden. Einige Komponenten unterstützen untergeordneten Inhalt und können verschachtelte Komponenten enthalten.

### Definieren einer Komponente

Um eine Komponente zu definieren, verwenden Sie den PSBlazor-Code-Editor, um die XML-Tags der Komponente hinzuzufügen. Um zum Beispiel eine Schaltfläche zu erstellen, würden Sie Folgendes tun.

```xml
<Button>Click Me</Button>
```

Das Ergebnis ist eine Seite mit einer definierten Schaltfläche.

### Attribute festlegen

Jede Komponente verfügt über verfügbare Attribute. Im Code-Editor für die PSBlazor-Seite werden die Attribute für die aktuell bearbeitete Komponente automatisch aufgelistet.

Das Festlegen von Attributen erfolgt genauso wie das Festlegen eines beliebigen XML-Attributs. In diesem Beispiel wird die Schaltfläche in den Zustand „danger“ geändert.

```xml
<Row>
    <Button Danger="true">Click Me</Button>
</Row>
```

Sobald Sie das Tool speichern, wird die Anzeige aktualisiert. Mit der Schaltfläche im Zustand „danger“ sehen Sie, dass sie nun rot ist.

### Untergeordneter Inhalt

Einige Komponenten bieten die Möglichkeit, untergeordneten Inhalt zu definieren. Sie können den Knoten `<ChildContent>` verwenden, um anzugeben, dass dies der Fall ist.

```xml
<Row>
   <ChildContent>
      <Button>Click Me</Button>
   </ChildContent>
</Row>
```

Wenn innerhalb des untergeordneten Elements der Komponente keine anderen Knoten angegeben sind, wird angenommen, dass es sich um untergeordneten Inhalt handelt. Das oben Gezeigte kann dadurch vereinfacht werden.

```xml
<Row>
    <Button>Click Me</Button>
</Row>
```

Einige Komponenten bieten Vorlagenattribute, die durch die Angabe mehrerer Knoten für untergeordneten Inhalt mit den entsprechenden Knotennamen festgelegt werden können. Beispielsweise kann eine Tabelle untergeordneten Inhalt haben, der aus Spalten und einer Titelvorlage besteht, die definiert, wie der Titel angezeigt wird. Wenn mehrere untergeordnete Knoten definiert sind, ist `<ChildContent>` erforderlich.

```xml
<Table DataSource="$Services">
   <ChildContent>
       <PropertyColumn Name="Name" />
   </ChildContent>
   <TitleTemplate>
      <Text>My Services</Text>
   </TitleTemplate>
</Table>
```

## PowerShell

Jedes PSBlazor-Tool bzw. jede PSBlazor-Komponente verfügt über eine zugehörige PSM1-Datei, die interaktive Logik enthält. Diese Logik kann mit Modulen interagieren, Skripte in PSU aufrufen oder die Oberfläche anhand der vom Skript verarbeiteten Daten aktualisieren.

### Event-Callbacks

Event-Callbacks treten auf, wenn der Benutzer mit einer PSBlazor-Komponente interagiert. Dazu können Mausklicks, Formularübermittlungen oder Tastatureingaben gehören. Event-Callbacks sind einfach PowerShell-Funktionen. Folgendes könnte verwendet werden, wenn ein Benutzer auf eine Schaltfläche klickt.

```powershell
function OnClick {
}
```

### Argumente

Die meisten Event-Callbacks stellen ein Objekt bereit, das Informationen über das Ereignis enthält. Mausereignisse enthalten zum Beispiel Informationen wie die Koordinaten des Klicks. Sie können darauf zugreifen, indem Sie einen Parameter `$EventArgs` bereitstellen.

```powershell
function OnClick {
   param($EventArgs)
}
```

### Kontext

Einige Komponenten sind kontextabhängig, zum Beispiel eine Tabellenzeile oder ein Formularelement. Kontextwerte werden mit einem Parameter `$Context` an den Event-Callback übergeben.

```powershell
function OnClick {
   param($Context)
}
```

## Variablen

Variablen können verwendet werden, um die PSBlazor-Komponenten mit Daten aus PowerShell zu aktualisieren. Verwenden Sie das Dictionary `$Variables`, um Variablen abzurufen und festzulegen.

```powershell
$Variables["TestVariable"] = "Not Clicked"

function OnClick {
    $Variables["TestVariable"] = "Clicked"
}
```

Innerhalb der PSBlazor-Syntax können Sie Variablen ähnlich referenzieren wie in PowerShell.

```xml
<Text>$TestVariable</Text>
<Button OnClick="OnClick">Click Me</Button>
```

Sie können Variablen auch in Attributen verwenden.

```xml
<Alert Message="$TestVariable"></Alert>
<Button OnClick="OnClick">Click Me</Button>
```

Variablen können auch komplexe Objekte wie `PSCustomObject` oder `Hashtable` sein. Wenn sie Eigenschaften besitzen, können Sie diese ebenfalls in der PSBlazor-Syntax referenzieren.

```xml
<Alert Message="$TestVariable.Name"></Alert>
<Button OnClick="OnClick">Click Me</Button>
```

### Datenbindung

Die Datenbindung bietet einen Mechanismus, um Variablen zu aktualisieren, ohne ein PowerShell-Skript aufrufen zu müssen. Um eine Bindung an ein Attribut einer PSBlazor-Komponente zu definieren, verwenden Sie die Syntax `bind-{attribute}`.

Beispielsweise könnten Sie für ein Eingabefeld wie folgt an eine Variable `$test` binden.

```xml
<Input bind-Value="$TextValue"></Input>
```

In Ihrem PowerShell-Modul könnten Sie dann über das Objekt `$Variables` auf die Variable zugreifen.

```powershell
$Message.Info($Variables["TextValue"])
```

### Lebenszyklus

Variablen werden gelöscht, wenn ein Benutzer die Seite aktualisiert. Sie werden über diesen Bereich hinaus nicht zwischengespeichert. Jeder Benutzer und jede Tool-Seite verfügt über einen anderen Satz von Variablen.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.devolutions.net/powershell-universal/de/portal/portal-widgets/syntax.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
