为什么我有UserControl的错误消息:
部分声明 MyNamespace.MyUserControl一定不能 指定不同的基类
仅仅因为我继承自另一个名称空间我在另一个名称空间中创建,而另一个名称空间在XAML中被引用为
xmlns:my="clr-namespace:ReferedNamespace;assembly=ReferedNamespace"
答案 0 :(得分:27)
很少继续这里,但这通常发生在后面的代码和xaml文件不从相同的基类继承。
由于我们没有关于您的问题的所有细节, 我将创建一个会导致抛出相同异常的情况, 这可能有助于您理解您的问题。
举个例子,只需使用Visual Studio创建新的WPF应用程序, XAML可能看起来像这样:
<Window x:Class="WpfApplication1.MainWindow" .....>
后面的代码将包含这样的内容:
public partial class MainWindow : Window
{
//Code here
}
请注意这里的'partial'修饰符。这意味着这个类(MainWindow)可能 不是在单个文件中定义,而是分布在多个文件中, 在这种情况下,XAML(.xaml.cs)和CS(.cs)文件。
现在向解决方案添加一个新的UserControl。它将命名为UserControl1。
不对XAML进行任何更改,请更改MainWindow的代码:
public partial class MainWindow : UserControl1
{
//Code here
}
现在你将得到你质疑的例外情况。
如果您仍无法找到解决方案,请在代码中查找类似的内容, 请提供更多代码。
答案 1 :(得分:17)
查看此部分的.cs和.xaml文件
:
<Window x:Class="BUSsAsDesign.GUI.IGPopUP" > ...... </Window>
:
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
}
}
- 我希望它有用:)。
答案 2 :(得分:1)
我想添加这条信息。在Visual Studio 2017中,有一个我没有时间深入挖掘的错误,但它会导致此错误。 (来自OP)
概述:将部分类声明为资源xaml文件的x:Class时,会导致此错误,并且在删除声明后,错误仍将存在。
要重现此错误,(或者如果您在此,因为您收到此错误消息)
第1步:创建新的WPF项目
第2步:创建新资源文件
步骤3:将资源文件名称空间更改为项目主命名空间(最后删除位。)
步骤4:在资源文件声明/标题部分中,添加一个x:Class声明,指定MainWindow(默认启动窗口对象)作为该资源文件的Class。 (EG:x:Class = MainWindow)
第5步:清洁/重建解决方案
第6步:您现在应该从OP获得此错误。因此,从资源文件的标题中删除x:Class声明,然后保存/清理/重建项目。
如果错误被重现,即使您从资源文件中删除了x:Class声明,错误也应该保留。
我可以找到针对此错误的唯一解决方案是删除项目 Bin 文件夹,以及包含内置版本的任何其他文件夹。
删除它们后,清理/重建项目,错误应该消失。