【问题标题】:WPF error message: Partial declaration must not specify different base classesWPF 错误消息:部分声明不得指定不同的基类
【发布时间】:2017-11-16 08:20:14
【问题描述】:

为什么我的 UserControl 会出现此错误消息:

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

仅仅因为我从另一个 UserControl 类继承我在另一个命名空间中创建,而这个另一个命名空间在 XAML 中被引用为

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

【问题讨论】:

  • 你能发布更多的 xaml 和你的调用声明
  • 请注意assembly;之间没有空格

标签: wpf wpf-controls


【解决方案1】:

这里没什么好说的,但这通常发生在后面的代码和 xaml 文件不是从同一个基类继承时。

由于我们没有关于您的问题的所有详细信息, 我将创建一个会导致抛出相同异常的情况, 这可能有助于您了解您的问题。

例如,只需使用 Visual Studio 创建新的 WPF 应用程序, XAML 可能看起来像这样:

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

后面的代码将包含如下内容:

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

请注意此处的“部分”修饰符。这意味着这个类(MainWindow)可能 不是在单个文件中定义,而是分布在多个文件中, 在本例中是 XAML (.xaml.cs) 和 CS (.cs) 文件。

现在向解决方案添加一个新的 UserControl。它将被命名为 UserControl1。

在不对 XAML 进行任何更改的情况下,更改 MainWindow 背后的代码:

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

现在你会得到你所质疑的异常。

在你的代码中寻找类似的东西,如果你仍然找不到解决方案, 请提供更多代码。

【讨论】:

  • 嗨,谢谢,这确实与继承有关。我已经解决了这个问题。
  • 我们如何告诉 xaml 使用 UserControl1 而不是 Window ??
【解决方案2】:

在这部分查看您的 .cs 和 .xaml 文件

  • 在 .xaml 文件中:

    <Window x:Class="BUSsAsDesign.GUI.IGPopUP" > ...... </Window>
    
  • 在 .cs 文件中:

    namespace BUSsAsDesign.GUI
    {
       public partial class IGPopUP : Window
      {
    
       //code here
    
      }
    }
    
  • 现在,如果您想将 Window 更改为 UserControl

  • 改变

    <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

       } 
    }

-我希望它有用:)。

【讨论】:

  • +1 非常感谢,这实际上为问题提供了解决方案!
【解决方案3】:

我想添加这条信息。在 Visual Studio 2017 中,有一个我没有时间深入研究的错误,但它会导致此错误。 (来自OP)

概述:当为资源xaml文件声明一个partial class为x:Class时,会导致这个错误,去掉声明后,错误依然存在。

重现此错误,(或者如果您因为收到此错误消息而出现在这里)

第 1 步:创建一个新的 WPF 项目。
第 2 步:创建一个新的资源文件
第 3 步:将资源文件命名空间更改为项目主命名空间(删除末尾的位。)
第 4 步: 在资源文件声明/标题部分,添加一个 x:Class 声明,指定您的 MainWindow (默认启动窗口对象)作为该资源文件的类。 (例如:x:Class=MainWindow)
第 5 步:清理/重建解决方案
第 6 步:您现在应该从 OP 收到此错误。因此,从资源文件的标题中删除 x:Class 声明,然后保存/清理/重建项目。

如果重现了该错误,则该错误应该仍然存在,即使您已从资源文件中删除了 x:Class 声明。

我能找到的唯一解决方案是删除项目Bin文件夹,以及其中包含构建的任何其他文件夹。

删除它们后,清理/重建您的项目,错误应该消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多