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;
}
}Contenuti dell'articolo
- Pagina 1
- Pagina 2
- Pagina 5
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Difficoltà
Utilità
Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
