Domanda

Ho una piccola applicazione di test Silverlight 3. Questo è un esercizio di apprendimento Silverlight, XAML, rilegatura, ecc ho un piccolo classe di test (Test), che dispone di tre proprietà; Val1, Val2 e Somma. Ho dichiarato una risorsa in XAML come segue:

<UserControl.Resources>
    <app:Test x:Name="xamlTestObj"></app:Test>
</UserControl.Resources>

Ho un pulsante sul controllo utente. Il codice dietro questo pulsante appare come:

        xamlTestObj.Val1 += 100;
        xamlTestObj.Val2 += 300;

La soluzione costruisce con successo, ma quando l'eseguo ottengo un NullReferenceException nel gestore di pulsante quando si fa riferimento xamlTestObj. Sono stato in grado di eseguire il pulsante di scatto con successo se ho tirato l'oggetto di elenco risorse del controllo utente. Come:

        Test xamlTestObj = (Test)Resources["xamlTestObj"];
        xamlTestObj.Val1 += 100;
        xamlTestObj.Val2 += 300;

La cosa che mi confonde è il motivo per cui ho bisogno di tirare l'oggetto fuori dalla lista risorse. Mi sembra che, se il compilatore può vedere il riferimento xamlTestObj che dovrebbe essere "vivo" per tutta la durata del campo di applicazione è dichiarato (in questo caso, il controllo utente). I controlli WPF si comportano in questo modo. Cioè, io posso accedere a qualsiasi delle caselle di testo e pulsanti che hanno immesso sul controllo utente.

Qualcuno può chiarire questo per me?

Grazie: -)

È stato utile?

Soluzione

Per quanto ne so, solo elementi nell'albero visivo vengono caricati nei loro campi corrispondenti nel metodo InitializeComponents. Risorse non fanno parte della struttura visiva, vengono caricati solo quando necessario, così loro campi corrispondenti rimangono nullo.

A proposito, è necessario utilizzare x:Key piuttosto che x:Name per le risorse

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top