WPF - Panoramica di XAML
Una delle prime cose che incontrerai mentre lavori con WPF è XAML. XAML è l'acronimo di Extensible Application Markup Language. È un linguaggio semplice e dichiarativo basato su XML.
In XAML è molto facile creare, inizializzare e impostare proprietà di oggetti con relazioni gerarchiche.
Viene utilizzato principalmente per la progettazione di GUI, tuttavia può essere utilizzato anche per altri scopi, ad esempio per dichiarare il flusso di lavoro in Workflow Foundation.
Sintassi di base
Quando crei il tuo nuovo progetto WPF, incontrerai parte del codice XAML per impostazione predefinita in MainWindow.xaml come mostrato di seguito.
<Window x:Class = "Resources.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MainWindow" Height = "350" Width = "525">
<Grid>
</Grid>
</Window>
Il file XAML sopra contiene diversi tipi di informazioni. La tabella seguente spiega brevemente il ruolo di ciascuna informazione.
Informazione | Descrizione |
---|---|
<Finestra | È l'elemento oggetto di apertura o il contenitore della radice. |
x: Class = "Resources.MainWindow" | È una dichiarazione di classe parziale che collega il markup al codice di classe parziale definito dietro. |
xmlns = "http://schemas.microsoft.com/win fx / 2006 / xaml / presentation" | Mappa lo spazio dei nomi XAML predefinito per il client / framework WPF |
xmlns: x = "http://schemas.microsoft.com/w infx / 2006 / xaml" | Spazio dei nomi XAML per il linguaggio XAML che lo associa al prefisso x: |
> | Fine dell'elemento oggetto della radice |
<Griglia> </Grid> |
Avvia e chiude i tag di un oggetto griglia vuoto. |
</Window> | Chiusura dell'elemento oggetto |
Le regole di sintassi per XAML sono quasi simili a XML. Se guardi un documento XAML, noterai che in realtà è un file XML valido, ma un file XML non è necessariamente un file XAML. È perché in XML il valore degli attributi deve essere una stringa mentre in XAML può essere un oggetto diverso noto come sintassi dell'elemento Property.
La sintassi di un elemento Object inizia con una parentesi angolare sinistra (<) seguita dal nome di un oggetto, ad esempio Button.
Definisci alcune proprietà e attributi di quell'elemento oggetto.
L'elemento Object deve essere chiuso da una barra (/) seguita immediatamente da una parentesi angolare retta (>).
Esempio di oggetto semplice senza elemento figlio
<Button/>
Esempio di elemento oggetto con alcuni attributi
<Button Content = "Click Me" Height = "30" Width = "60" />
Esempio di una sintassi alternativa definisce le proprietà (sintassi dell'elemento proprietà)
<Button>
<Button.Content>Click Me</Button.Content>
<Button.Height>30</Button.Height>
<Button.Width>60</Button.Width>
</Button>
Esempio di oggetto con elemento figlio: StackPanel contiene Textblock come elemento figlio
<StackPanel Orientation = "Horizontal">
<TextBlock Text = "Hello"/>
</StackPanel>
Perché XAML in WPF
XAML non è solo la funzionalità più conosciuta di WPF, ma è anche una delle funzionalità più fraintese. Se sei esposto a WPF, devi aver sentito parlare di XAML; ma prendi nota dei seguenti due fatti meno noti su XAML:
- WPF non necessita di XAML
- XAML non necessita di WPF
Sono infatti pezzi di tecnologia separabili. Per capire come può essere, diamo un'occhiata a un semplice esempio in cui viene creato un pulsante con alcune proprietà in XAML.
<Window x:Class = "WPFXAMLOverview.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MainWindow" Height = "350" Width = "604">
<StackPanel>
<Button x:Name = "button" Content = "Click Me" HorizontalAlignment = "Left"
Margin = "150" VerticalAlignment = "Top" Width = "75" />
</StackPanel>
</Window>
Se scegli di non utilizzare XAML in WPF, puoi ottenere lo stesso risultato della GUI anche con il linguaggio procedurale. Diamo un'occhiata allo stesso esempio, ma questa volta creeremo un pulsante in C #.
using System.Windows;
using System.Windows.Controls;
namespace WPFXAMLOverview {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
// Create the StackPanel
StackPanel stackPanel = new StackPanel();
this.Content = stackPanel;
// Create the Button
Button button = new Button();
button.Content = "Click Me";
button.HorizontalAlignment = HorizontalAlignment.Left;
button.Margin = new Thickness(150);
button.VerticalAlignment = VerticalAlignment.Top;
button.Width = 75;
stackPanel.Children.Add(button);
}
}
}
Quando compili ed esegui il codice XAML o il codice C #, vedrai lo stesso output come mostrato di seguito.
Dall'esempio precedente, è chiaro che ciò che puoi fare in XAML per creare, inizializzare e impostare le proprietà degli oggetti, le stesse attività possono essere eseguite anche usando il codice.
XAML è solo un altro modo semplice e facile per progettare elementi dell'interfaccia utente.
Con XAML, ciò non significa che ciò che puoi fare per progettare gli elementi dell'interfaccia utente sia l'unico modo. Puoi dichiarare gli oggetti in XAML o definirli usando il codice.
XAML è facoltativo, ma nonostante ciò è al centro della progettazione di WPF.
L'obiettivo di XAML è consentire ai progettisti visivi di creare direttamente elementi dell'interfaccia utente.
WPF mira a rendere possibile il controllo di tutti gli aspetti visivi dell'interfaccia utente dal markup.