2009-05-14 16 views
17

Nel mio XAML UI sto essenzialmente ereditare da una classe "BaseView" che contiene funzionalità comuni a diverse forme, ma questo impedisce il designer di visualizzare il modulo: "Could non creare istanze di tipo BaseView ". Il codice verrà compilato ed eseguito, ma è frustrante non poter vedere il modulo nel Designer. C'è un modo migliore? Grazie.WPF Designer "Impossibile creare un'istanza di tipo"

XAML:

<vw:BaseView 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:vw="clr-namespace:ReviewClient" 
    x:Class="ReviewClient.MainPage" 

...

+0

ReviewClient l'assembly padre per XAML? Altrimenti, è necessario aggiungere un riferimento ReviewClient all'assembly contenente questo file XAML. – Gishu

+0

ReviewClient è lo spazio dei nomi locale. – jchadhowell

risposta

21

Il problema è che la classe di base è stata definita come astratta. Ciò ha causato il fallimento del progettista. Questo problema è descritto in modo più dettagliato nella sezione commenti del blog di Laurent Bugnion: http://geekswithblogs.net/lbugnion/archive/2007/03/02/107747.aspx

+2

Grazie! Stavo solo avendo questo problema me stesso. – Stephen

+0

Non riesco a vedere la soluzione, per il progettista, nel link che hai annotato. –

+0

La soluzione è quella di rendere concreta la classe base (cioè rimuovere la parola chiave abstract dalla classe base). Non è una soluzione molto soddisfacente, ma funziona. –

4

Un'altra possibile causa, come abbiamo appena trovato qui, quindi sto aggiungendo questa risposta per gli utenti futuri, è se il progetto è ospitato su un fonte non attendibile, come un file server.

In tal caso, il progettista non sarebbe caricare l'assembly e così ha dato lo stesso "... Impossibile creare l'istanza" errore. La soluzione dovrebbe comunque compilare ed eseguire il debug OK.

1

Un'altra possibile causa.

Ho un controllo utente che ha controlli figlio che generano eventi, ad es. selection_changed sul controllo di lista. Il gestore di eventi select_changed apporta modifiche ad altri controlli figlio.

Durante l'inizializzazione di proprietà elemento selezionato della casella di riepilogo viene cambiato e innesca un evento selection_changed. Il gestore tenta di aggiornare gli altri controlli figlio, ma non può perché non sono stati ancora istanziati. Ciò porta a un'eccezione del puntatore nullo e causa il problema.

volta che il problema puntatore nullo è stato gestito il controllo era in grado di essere istanziati e apparso nel controllo padre.

0

ho il problema che la mia classe MVVM hanno accesso al database nel costruttore e che è stato il problema, viene generata un'eccezione. Devo solo verificare se l'applicazione è in esecuzione in modalità Progettazione.

2

Un'altra causa. La mia classe di controllo ha avuto un campo statico che è stato inizializzato da risorse, in questo modo:

static Color s_ImgColor = (Color)TheApp.Resources["PhoneForegroundColor"]; 

Che sarebbe un'eccezione riferimento null in editor di XAML, poiché le risorse non sono disponibili in modalità di progettazione. Se non si tratta di una risorsa colore (ad esempio, un pennello), ciò non costituirà un problema, ma un tipo typecast to value viene visualizzato su un riferimento null.

0

In WinForms, è possibile utilizzare il designer con comandi astratti se si utilizza un personalizzato TypeDescriptionProvider per informare il progettista di un'implementazione concreta:

sto usando la soluzione in this answer a un'altra domanda, che collega this article . L'articolo raccomanda l'uso di un'imposta personalizzata TypeDescriptionProvider e l'implementazione concreta della classe astratta. Il progettista chiederà al fornitore personalizzato quali tipi utilizzare e il codice può restituire la classe concreta in modo che il progettista sia felice mentre si ha il controllo completo su come la classe astratta appaia come una classe concreta.

7

ho trovato una soluzione molto utile per questo su: http://www.progware.org/Blog/post/WPF-Designer-Error-Could-not-create-an-instance-of-type.aspx.

Questo link spiega come la finestra di progettazione WPF gestisce il costruttore per visualizzare l'interfaccia utente in XAML e il rimedio: aggiungendo il seguente frammento a qualsiasi parte del codice del costruttore che potrebbe essere dando errore:

if(!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) 
{ 
    //code producing exception   
} 

la il nome della funzione è auto esplicativo. :) Questo collegamento fornisce anche soluzioni sui problemi di debugging con XAML.

0

E un'altra possibile situazione (questo è vero per almeno SL per WP):

Se si crea instanse della classe (. Es <local:MyDataSource />) allora dovrebbe essere pubblica. Se la tua classe è interna, funzionerà in fase di progettazione ma fallirà con questa eccezione in fase di runtime.

0

Il motivo per cui ho ricevuto questo errore è stato semplice ma difficile da rintracciare. La mia classe di convertitore non era pubblica. Cambiando semplicemente l'accessibilità della classe l'ha risolto.

public class StringToLowerConverter : IValueConverter 
Problemi correlati