Costruire applicazioni Windows con WPF

5 pagine in totale: <<Indietro 1 2 3 [4] 5 Avanti >>

Questo file XAML è astratto, non può contenere controlli e oggetti, ma solo definire risorse disponibili per l'intero ambito dell'applicazione.
Anche questo file dispone di uno autogenerato, ma essendo di tipo Application ha del codice in più:

public partial class MyApp : System.Windows.Application {

public void InitializeComponent() {
    this.StartupUri = new System.Uri("Window1.xaml", System.UriKind.Relative);
    System.Uri resourceLocater = new System.Uri("myapp.baml", System.UriKind.RelativeOrAbsolute);
    System.Windows.Application.LoadComponent(this, resourceLocater);
}

[System.STAThreadAttribute()]
public static void Main() {
    System.Threading.Thread.CurrentThread.SetApartmentState(System.Threading.ApartmentState.STA);
    HelloWorld.MyApp app = new HelloWorld.MyApp();
    app.InitializeComponent();
    app.Run();
}
}

La proprietà StartupUri serve per indicare la finestra iniziale e definisce un metodo statico Main.
Si tratta dell'entry point del nostro exe, fondamentale per qualsiasi tipo di applicazione anche non WinFX, sviluppata in .NET. Questo metodo non fa altro che istanziare il nostro oggetto Application ed avviarlo.

L'apartment state di tipo STA (Single Thread Apartment) va a modificare la modalità di esecuzione dei threads per renderla compatibile con il vecchio mondo COM, cosa che ci permette di interoperare con esso.

Ricapitolando, quando compiliamo in realtà andiamo a generare un unico assembly contenente tante classi e file .baml quanti sono i file .xaml. Nel nostro caso quindi l'assembly si chiama HelloWorld.exe e contiene:

  • namespace HelloWorld
    • classe Window1
    • classe MyApp
  • risorse
    • Window1.baml
    • MyApp.baml

Proviamo ora a modificare il file window1.xaml aggiungendo al tag Button un nome, così:

<Button x:Name="helloButton" Content="Hello World!" />

Compiliamo e il file autogenerato cambia definendo un campo a livello di classe:

internal System.Windows.Controls.Button helloButton;

E poi un metodo che "connette" l'oggetto con la variabile:

void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
    switch (connectionId)
    {
        case 1:
        this.helloButton = ((System.Windows.Controls.Button)(target));
        return;
    }
}

5 pagine in totale: <<Indietro 1 2 3 [4] 5 Avanti >>

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.



TUTORIALS


IN EVIDENZA
MISC