2011-01-26 5 views
13

Perché ho questo messaggio di errore per un UserControl:messaggio di errore WPF: dichiarazione di parziale non deve specificare diverse classi di base

dichiarazione parziale di MyNamespace.MyUserControl non deve specificare diverse classi di base

Solo perché ho ereditato da un'altra classe UserControl che ho creato in un altro spazio dei nomi mentre questo altro spazio dei nomi è referenziato in XAML come

xmlns:my="clr-namespace:ReferedNamespace;assembly=ReferedNamespace" 
+1

puoi postare più xaml e la dichiarazione delle tue chiamate – baalazamon

+0

ti preghiamo di notare che non c'è spazio tra 'assembly' e'; ' –

risposta

25

Poco da fare qui, ma questo di solito accade quando il codice dietro e il file xaml non ereditano dalla stessa classe base.

Dato che non abbiamo tutti i dettagli relativi al problema, creerò una situazione che farà sì che venga generata la stessa eccezione, questo potrebbe aiutarti a capire il tuo problema.

A titolo di esempio, basta creare nuova applicazione WPF utilizzando Visual Studio, Il XAML potrebbe essere simile a questo:

<Window x:Class="WpfApplication1.MainWindow" .....> 

Il codice dietro sarebbe allora contenere qualcosa di simile:

public partial class MainWindow : Window 
{ 
    //Code here 
} 

Nota il modificatore 'parziale' qui. Significa che questa classe (MainWindow) potrebbe essere non definita in un singolo file ma distribuita su più file, in questo caso i file XAML (.xaml.cs) e CS (.cs).

Ora aggiungere un nuovo UserControl alla soluzione. Sarà denominato UserControl1.

senza apportare alcuna modifica al codice XAML, modificare il codice dietro per il MainWindow:

public partial class MainWindow : UserControl1 
{ 
    //Code here 
} 

Ora si otterrà l'eccezione si interrogato circa.

Cerca qualcosa di simile nel codice, se non riesci ancora a trovare una soluzione, per favore fornisci altro codice.

+0

Ciao grazie che era effettivamente collegato all'ereditarietà. Ho risolto il problema. – user310291

15

un'occhiata a entrambi i vostri Cs e file XAML in questo parti

  • nel file XAML:

    <Window x:Class="BUSsAsDesign.GUI.IGPopUP" > ...... </Window> 
    
  • in.File cs:

    namespace BUSsAsDesign.GUI 
    { 
        public partial class IGPopUP : Window 
        { 
    
        //code here 
    
        } 
    } 
    
  • Ora, se u vuoi cambiare finestra di UserControl

  • cambiamento

    <Window x:Class="BUSsAsDesign.GUI.IGPopUP" > ....... </Window> 
    <!--**becomes**--> 
    <UserControl x:Class="BUSsAsDesign.GUI.IGPopUP" > ....... </UserControl> 
    

namespace BUSsAsDesign.GUI 
    { 
     public partial class IGPopUP : Window 
     { 

     //code here 

     } 
    } 
    //**becomes** 
    namespace BUSsAsDesign.GUI 
    { 
     public partial class IGPopUP : UserControl 
     { 

     //code here 

     } 
    } 

- spero `s utile :) .

+2

+1 Grazie mille, questo ha effettivamente fornito la soluzione per il problema in questione! – AgentKnopf

0

Volevo aggiungere questa informazione. In Visual Studio 2017, c'è un bug che non ho avuto il tempo di approfondire con molta profondità, ma causa questo errore. (dall'OP)

Panoramica: Quando si dichiara una classe parziale come x: Class per un file xaml di risorsa, verrà generato questo errore e, dopo aver rimosso la dichiarazione, l'errore persisterà.

Per riprodurre il bug, (o se siete qui perché si stanno ottenendo questo messaggio di errore)

Fase 1: Creare un nuovo progetto WPF.
Fase 2: creare un nuovo file di risorse
Fase 3: Modificare lo spazio dei nomi dei file di risorse ai progetti namespace principale (rimuovere la punta alla fine.)
Fase 4: nella risorsa dichiarazione di file/sezione intestazione, aggiungere una dichiarazione x: Class che specifica MainWindow (oggetto finestra di avvio predefinito) come Classe per quel file di risorse. (EG: x: Class = MainWindow)
Fase 5: Clean/Rigenera soluzione
Fase 6: Si dovrebbe essere sempre questo errore dall'OP. Quindi rimuovi la x: Dichiarazione di classe dall'intestazione del file di risorse e salva/pulisci/ricostruisci il progetto.

Se il bug è stato riprodotto, l'errore dovrebbe rimanere, anche se è stata rimossa la dichiarazione x: Class dal file di risorse.

L'unica soluzione che ho trovato per questo bug, è quello di eliminare progetti Bin cartella, e qualsiasi altra cartella con costruisce in essa.

Dopo averli eliminati, pulisci/ricostruisci il progetto e l'errore dovrebbe scomparire.