> 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/it/portale/portal-widgets/syntax.md).

# Sintassi

Scopra la sintassi PSBlazor utilizzata in PowerShell Universal per definire componenti, attributi, callback di eventi e data binding per i widget del portale.

PSBlazor è una sintassi personalizzata basata su Blazor e sulle pagine Razor. È simile a XML o XAML e fornisce un meccanismo per definire in modo dichiarativo un'interfaccia utente.

## Componenti

Ogni componente è definito con un nodo XML, ad esempio `<Button>` o `<Text>`. Ogni componente dispone di un proprio insieme di attributi che personalizzano il comportamento e l'aspetto del widget. Alcuni componenti supportano contenuti figlio e possono includere componenti annidati.

### Definizione di un componente

Per definire un componente, utilizzerà l'editor di codice PSBlazor per aggiungere i tag XML del componente. Ad esempio, per creare un pulsante, procederebbe come segue.

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

Il risultato è una pagina con un pulsante definito.

### Impostazione degli attributi

Ogni componente dispone di attributi disponibili. All'interno dell'editor di codice per la pagina PSBlazor, gli attributi verranno elencati automaticamente per il componente che sta modificando.

Impostare gli attributi equivale a impostare qualsiasi attributo XML. Questo esempio modifica il pulsante allo stato danger.

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

Dopo aver salvato lo strumento, la visualizzazione verrà aggiornata. Con il pulsante nello stato danger, vedrà che ora è rosso.

### Contenuto figlio

Alcuni componenti offrono la possibilità di definire un contenuto figlio. Può utilizzare il nodo `<ChildContent>` per specificare che è così.

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

Se non vengono specificati altri nodi all'interno del figlio del componente, si presume che si tratti di contenuto figlio. Quanto sopra può essere semplificato in questo modo.

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

Alcuni componenti forniscono attributi di modello che possono essere impostati specificando più nodi di contenuto figlio con i nomi di nodo appropriati. Ad esempio, la tabella può avere un contenuto figlio composto da colonne e un modello di titolo che definisce come viene visualizzato il titolo. Quando vengono definiti più nodi figlio, `<ChildContent>` è obbligatorio.

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

## PowerShell

Ogni strumento o componente PSBlazor è associato a un file PSM1 che contiene la logica interattiva. Questa logica può interagire con i moduli, invocare script in PSU o aggiornare l'interfaccia in base ai dati elaborati dallo script.

### Callback di eventi

I callback di eventi si verificano quando l'utente interagisce con un componente PSBlazor. Ciò può includere clic del mouse, invii di moduli o input da tastiera. I callback di eventi sono semplici funzioni PowerShell. Quanto segue potrebbe essere utilizzato per quando un utente fa clic su un pulsante.

```powershell
function OnClick {
}
```

### Argomenti

La maggior parte dei callback di eventi fornisce un oggetto che contiene informazioni sull'evento. Ad esempio, gli eventi del mouse includono informazioni come le coordinate del clic. Può accedervi fornendo un parametro `$EventArgs`.

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

### Contesto

Alcuni componenti sono contestuali. Ad esempio, una riga di tabella o un elemento di modulo. I valori di contesto vengono passati al callback di evento con un parametro `$Context`.

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

## Variabili

Le variabili possono essere utilizzate per aggiornare i componenti PSBlazor con dati provenienti da PowerShell. Utilizzi il dizionario `$Variables` per ottenere e impostare le variabili.

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

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

All'interno della sintassi PSBlazor, può fare riferimento alle variabili in modo simile a quanto farebbe in PowerShell.

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

Può anche utilizzare le variabili negli attributi.

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

Le variabili possono anche essere oggetti complessi come `PSCustomObject` o `Hashtable`. Se dispongono di proprietà, può fare riferimento anche a queste nella sintassi PSBlazor.

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

### Data binding

Il data binding fornisce un meccanismo per aggiornare le variabili senza dover chiamare uno script PowerShell. Per definire un'associazione tra un attributo di un componente PSBlazor, utilizzi la sintassi `bind-{attribute}`.

Ad esempio, potrebbe associare una variabile `$test` a una casella di input in questo modo.

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

Nel suo modulo PowerShell potrebbe quindi accedere alla variabile dall'oggetto `$Variables`.

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

### Ciclo di vita

Le variabili vengono cancellate quando un utente aggiorna la pagina. Non vengono memorizzate nella cache oltre questo ambito. Ogni utente e ogni pagina dello strumento avrà un insieme di variabili diverso.


---

# 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/it/portale/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.
