2012-05-02 23 views
5

Sé que hay información sobre esto en Internet, pero estoy teniendo problemas para traducirlo a mi situación.Las declaraciones parciales de no deben especificar diferentes clases base

Tengo una ventana xaml y estoy obteniendo el error: Las declaraciones parciales de 'GX3OpenStackupGUIPlugin.GX3OpenStackupGUIPlugin' no deben especificar diferentes clases base .

Mi código subyacente es:

public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin, IGX3PluginInterface 
    { 

Mi xaml es:

<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"> 

Por favor, podría alguien aconsejar por :)

Aquí hay un enlace a lo que he encontrado, pero estoy luchando para traducir ... Partial declarations must not specify different base classes

Después de hacer una litt le más investigación Descubrí que si cambio mi código para implementar el elemento de nivel superior en mi xaml, se elimina el error. Eso obviamente sigue siendo un problema ya que mi clase codebehind necesita implementar las interfaces que he diseñado.

+0

Ambas respuestas tienen sentido para mí, pero no puedo encontrar dónde está la "otra" definición de clase parcial. ¿Algunas ideas? – user589195

+0

Cuando elimino el parcial, me queja de que hay otra declinación parcial de la clase, pero buscar el nombre de la clase no produce nada :( – user589195

+0

¿Tiene un archivo XAML para GX3OpenStackupGUIPlugin (es decir, es un control WPF) o está es solo una clase normal de C#? Si es un archivo XAML, ¿puedes publicar la parte superior de XAML como lo hiciste para tu cuadrícula? – Ian

Respuesta

1

Habrá dos (o más) partes para esa partial class. Si busca, debe encontrar otroclass GX3OpenStackupGUIPlugin, que probablemente especifica algo así como Control como tipo de base. Usted solo está mirando una parte del archivo. La otra mitad probablemente deba expandirse desde debajo de la xaml.

El problema es que dos archivos están haciendo algo como esto:

(archivo de la primera)

public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin, IGX3PluginInterface {} 

(presentar la segunda)

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

declaraciones de clases parciales significa que pueda especifique el código para la misma clase en 2 archivos diferentes:

AOther.cs

public partial class A 
{} 

A.cs

public partial class A 
{} 

Este error le está diciendo que las clases definen diferentes bases.

AOther.cs

public partial class A : B 
{} 

A.cs

public partial class A : X 
{} 

En el ejemplo, A no puede heredar de B y X en diferentes archivos. Creo que es posible especificar la cadena de herencia en XAML, pero no puedo ver nada haciendo esto en el código publicado.

actualización

Con las modificaciones a la cuestión en el comentario que sugieren lo siguiente. En lugar de mirar la herencia para hacer que su control/ventana herede de un GX3ClientPlugin, debería mirar la composición. Básicamente, esto significa colocar una instancia de GX3ClientPlugin en su formulario y llamar a través de él. Si es necesario, escriba una interfaz para la clase GX3ClientPlugin, haga que el formulario lo implemente, pero para cada método solo llame a la instancia que contiene debajo. Creo que la herencia es la forma incorrecta de resolver este problema, ya que su clase tiene dos preocupaciones: la lógica de UI y GX3ClientPlugin.

8

La pregunta a la que vinculó contiene la respuesta. La persona que hizo esa pregunta comenzó con esta (que funcionaba):

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

Y lo cambiaron a esto (que no funcionaba):

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

Esto no funciona porque, detrás de las escenas, un archivo .cs se genera basándose en el XAML que contiene una clase parcial que hereda de A. para solucionarlo, tenían que cambiarlo a esto:

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

Así, en su caso, te creo debería reemplazar Grid, es decir, hacer algo como esto:

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

(I asumen que GX3ClientPlugin hereda en última instancia, de algo así como cuadrícula o control de usuario?)

+0

No es así, pero parece que será necesario. – user589195

+1

Ok, ¿por qué no puedo heredar de la clase Window y de otra clase al mismo tiempo? – user589195

+0

No creo .NET admite herencia múltiple, pero vea también mi comentario en la pregunta original. – Andrew

4

Tengo este error cuando traté de heredar una TabItem. Los Cs parecían:

public partial class ucTabItemSelectionCriteria : TabItem 

La primera línea de XAML parecía:

<UserControl 

Ese fue el desajuste que se mostrará cuando el código se genera a partir del XAML. Se fija cuando cambio las 2 primeras líneas de XAML a:

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

Ahora ambos se heredan desde el control TabItem.

Cuestiones relacionadas