5

我知道互联网上有这方面的信息,但我在将其转化为我的情况时遇到了问题。

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

我背后的代码是:

public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin, IGX3PluginInterface
    {

我的xml是:

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

请有人建议:)

这是我找到但正在努力翻译的链接... 部分声明不得指定不同的基类

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

4

4 回答 4

8

您链接到的问题包含答案。问这个问题的人是从这个开始的(这很有效):

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

他们把它改成了这个(没有用):

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

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

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

因此,在您的情况下,我相信您应该替换 Grid,即执行以下操作:

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

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

于 2012-05-02T13:36:09.713 回答
4

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

public partial class ucTabItemSelectionCriteria : TabItem

XAML 的第一行如下所示:

<UserControl 

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

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

现在两者都继承自 TabItem 控件。

于 2012-07-04T20:06:28.510 回答
2

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

AOother.cs

public partial class A
{}

A.cs

public partial class A
{}

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

AOother.cs

public partial class A : B
{}

A.cs

public partial class A : X
{}

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

更新

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

于 2012-05-02T12:57:20.523 回答
1

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

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

(提交第一个)

public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin, IGX3PluginInterface {}

(提交第二个)

public partial class GX3OpenStackupGUIPlugin : SomethingElse {...}
于 2012-05-02T12:56:04.757 回答