InitializeComponent
è un metodo definito sull'interfaccia System.Windows.Markup.IComponentConnector
e viene utilizzato per il caricamento della pagina compilata di un componente.
Vedi MSDN
estratto di sotto da questa link che ha più informazioni:
IComponentConnector
viene utilizzato internamente da Baml2006Reader
.
Le implementazioni di InitializeComponent
sono ampiamente osservabili come parte dell'infrastruttura fornita da framework o tecnologie che utilizzano XAML
combinato con i modelli di applicazione e di programmazione. Ad esempio, ogni volta che si guardano le classi generate per gli elementi radice XAML nelle pagine e nelle applicazioni WPF, nell'output verrà visualizzato InitializeComponent. Questo metodo esiste anche nell'assieme compilato e svolge un ruolo nel modello applicativo WPF di caricamento del contenuto dell'interfaccia utente XAML in tempo di analisi XAML (e suppongo quindi che InitializeComponent
debba essere in un'interfaccia e sia pubblico in modo che altri assembly esterni di WPF possano farne uso).
Per spiegare questo ulteriore, passare alla definizione di InitializeComponent()
metodo nella (diciamo): Window1.g.cs
classe di esempio: WPFProject
progetto, e cambiare il suo accesso da public
a private
(mantenere il .es. il file cs aperta nel progetto altrimenti il processo di compilazione sovrascrive il file, e non sarà in grado di vedere l'errore)
Ora, quando si compila il progetto WPF, getta un errore di compilazione, come di seguito:
Errore 22 'WPFProject.Window1' non implementa il membro di interfaccia 'System.Windows.Markup.IComponentConnector.InitializeComponent()'. 'WPFProject.Window1.InitializeComponent()' non può implementare un membro di interfaccia perché non è pubblico.
Inoltre, InitializeComponent()
è contrassegnato con l'attributo [System.Diagnostics.DebuggerNonUserCodeAttribute()]
così non si può entrare in questo metodo durante il debug.
C'è un altro SO QA discussion, che li aiuterebbe a spiegare più in dettaglio
Senza una chiamata a InitializeComponent XAML non otterrete analizzato – Sharun
@Sharun, sì, ma non dovrebbe essere chiamato fuori del controllo – SiberianGuy
@Sharun: E ' è chiamato all'interno del costruttore del controllo, non è vero? Quindi non deve essere pubblico ... –