2012-05-02 27 views
5

So che ci sono informazioni su questo su Internet, ma ho problemi a tradurlo nella mia situazione.Dichiarazioni parziali di non deve specificare diverse classi di base

Ho una finestra xaml e sto ricevendo l'errore: dichiarazioni parziali di 'GX3OpenStackupGUIPlugin.GX3OpenStackupGUIPlugin' non devono specificare diverse classi di base .

Il mio codice è dietro:

public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin, IGX3PluginInterface 
    { 

mio XAML è:

<Grid xmlns:my="clr-namespace:CustomControls;assembly=MultiComboBox" xmlns:extToolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit/extended" x:Class="GX3OpenStackupGUIPlugin.GX3OpenStackupGUIPlugin" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

prega potrebbe qualcuno raccomandare :)

Ecco un link a quello che ho trovato, ma sto lottando per tradurre ... Partial declarations must not specify different base classes

Dopo aver fatto un litt più ricerche ho scoperto che se cambio codice dietro per implementare l'elemento di livello superiore nel mio xaml, si elimina l'errore. Questo è ovviamente ancora un problema in quanto il mio codice di classe ha bisogno di implementare le interfacce che ho progettato.

+0

Entrambe queste risposte hanno senso per me, ma non riesco a trovare dove sia l'altra definizione parziale di classe. Qualche idea? – user589195

+0

Quando rimuovo il partial si lamenta che esiste un'altra declassazione parziale della classe, ma la ricerca del nome della classe non produce nulla :( – user589195

+0

Hai un file XAML per GX3OpenStackupGUIPlugin (cioè è un controllo WPF) o è è solo una normale classe C# Se si tratta di un file XAML puoi pubblicare la parte superiore di XAML come hai fatto per la tua griglia? – Ian

risposta

1

Ci saranno due (o più) parti di quello partial class. Se si cerca, si dovrebbe trovare un altroclass GX3OpenStackupGUIPlugin, che probabilmente specifica qualcosa come Control come tipo di base. Stai guardando solo una parte del file. Probabilmente l'altra metà deve essere espansa da sotto l'xaml.

Il problema è che due file stanno facendo qualcosa di simile:

(file la prima)

public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin, IGX3PluginInterface {} 

(depositare il secondo)

public partial class GX3OpenStackupGUIPlugin : SomethingElse {...} 
2

dichiarazioni di classe parziale significa che si può specificare il codice per la stessa classe in 2 file diversi:

AOther.cs

public partial class A 
{} 

A.cs

public partial class A 
{} 

Questo errore sta dicendo che le classi definiscono basi diverse.

AOther.cs

public partial class A : B 
{} 

A.cs

public partial class A : X 
{} 

Nell'esempio, A non può ereditare da B e X in file diversi. Penso che sia possibile specificare la catena di ereditarietà in XAML ma non riesco a vedere nulla nel codice pubblicato.

Aggiornamento

Con le modifiche alla domanda nel commento propongo quanto segue. Invece di considerare l'ereditarietà per rendere il controllo/finestra ereditato da un GX3ClientPlugin, dovresti considerare la composizione. In sostanza, ciò significa posizionare un'istanza di GX3ClientPlugin nel modulo e chiamarci. Se è necessario scrivere un'interfaccia per la classe GX3ClientPlugin, rendere il modulo implementarlo, ma per ogni metodo è sufficiente richiamare l'istanza che contiene al di sotto. Penso che l'ereditarietà sia la strada sbagliata per affrontare questo problema, dato che la tua classe ha 2 dubbi: la logica UI e GX3ClientPlugin.

8

La domanda a cui è stato collegato contiene la risposta. La persona che ha chiesto questa domanda ha iniziato con questo (che ha funzionato):

<A x:Class="B"> 
public partial class B : A 

E hanno cambiato a questo (che non ha funzionato):

<A x:Class="C"> 
public partial class C : B 

Questo non funziona perché, dietro le scene, un file con estensione cs viene generato in base alla XAML che contiene una classe parziale che eredita da A. per risolvere il problema, avevano bisogno di cambiarlo a questo:

<B x:Class="C"> 
public partial class C : B 

Quindi nel tuo caso, ti credo dovrebbe sostituire Grid, vale a dire fare qualcosa di simile:

<namespace:GX3ClientPlugin x:Class="namespace.GX3OpenStackupGUIPlugin"> 
public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin 

(suppongo che in ultima analisi, GX3ClientPlugin eredita da qualcosa come griglia o UserControl?)

+0

Non funziona, ma sembra che ne abbia bisogno. – user589195

+1

Ok quindi perché non posso ereditare dalla classe Window e un'altra classe allo stesso tempo? – user589195

+0

Non credo che .NET supporti l'ereditarietà multipla, ma vedi anche il mio commento sotto la domanda originale. – Andrew

4

ho ottenuto questo errore quando ho cercato di ereditare una TabItem. I .cs sembravano:

public partial class ucTabItemSelectionCriteria : TabItem 

La prima linea di XAML sembrava:

<UserControl 

Questa è stata la mancata corrispondenza che avrebbe mostrato fino quando il codice è stato generato dalla XAML. E 'stato risolto quando cambio le prime 2 righe di XAML per:

<controls:TabItem xmlns:controls= 
"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" 

Ora entrambi sono ereditate dal controllo TabItem.

Problemi correlati