部分声明不得指定不同的基类

时间:2012-05-02 12:51:28

标签: c# wpf

我知道在互联网上有关于此的信息,但我在将其翻译成我的情况时遇到了问题。

我有一个xaml窗口,我得到错误:'GX3OpenStackupGUIPlugin.GX3OpenStackupGUIPlugin'的部分声明不能指定不同的基类

我的代码背后是:

public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin, IGX3PluginInterface
    {

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

请有人建议:)

这是我找到的链接,但我正在努力翻译...... Partial declarations must not specify different base classes

在做了一点研究之后,我发现如果我改变我的代码后面来实现我的xaml中的顶级元素,它就会摆脱错误。这显然仍然是一个问题,因为我的代码隐藏类需要实现我设计的接口。

4 个答案:

答案 0 :(得分:8)

您链接的问题包含答案。问这个问题的人开始于此(有效):

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

然后他们把它改成了(这没用):

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

这不起作用,因为在幕后,基于包含从A继承的部分类的XAML生成.cs文件。要修复它,他们需要将其更改为:

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

所以在你的情况下,我相信你应该替换Grid,即做这样的事情:

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

(我假设GX3ClientPlugin最终继承自Grid或UserControl之类的东西?)

答案 1 :(得分:4)

当我尝试继承TabItem时出现此错误。 .cs看起来像:

public partial class ucTabItemSelectionCriteria : TabItem

XAML的第一行看起来像:

<UserControl 

这是从XAML生成代码时出现的不匹配。当我将XAML的前两行更改为:

时,它已得到修复
    <controls:TabItem xmlns:controls= 
"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"

现在两者都是从TabItem控件继承的。

答案 2 :(得分:2)

部分类声明意味着您可以在2个不同的文件中指定同一个类的代码:

<强> AOther.cs

public partial class A
{}

<强> A.cs

public partial class A
{}

这个错误告诉你这些类定义了不同的基础。

<强> AOther.cs

public partial class A : B
{}

<强> A.cs

public partial class A : X
{}

在示例中,A不能从B和X继承不同的文件。我认为可以在XAML中指定继承链,但我在发布的代码中看不到任何这样做。

<强>更新

随着评论中对问题的修改,我建议如下。而不是查看继承以使您的控件/窗口继承自GX3ClientPlugin,您应该查看组合。基本上这意味着,在表单上放置一个GX3ClientPlugin实例并调用它。如果需要为GX3ClientPlugin类编写一个接口,请使表单实现它,但是对于每个方法,只需调用它所在的实例。我认为继承是解决这个问题的错误方法,因为你的类有两个问题 - UI和GX3ClientPlugin逻辑。

答案 3 :(得分:1)

partial class会有两个(或更多)部分。如果您搜索,则应找到另一个 class GX3OpenStackupGUIPlugin,这可能会指定类似Control的基本类型。您只查看文件的一部分。另一半可能需要从xaml下扩展。

问题是两个文件正在做这样的事情:

(提交第一个文件)

public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin, IGX3PluginInterface {}

(提交第二个文件)

public partial class GX3OpenStackupGUIPlugin : SomethingElse {...}