“Kproj.Forms.frmSwitch"不能是XAML文件的根,因为它是使用XAML定义的
本文关键字:XAML 因为 定义 Kproj 文件 quot 不能 Forms frmSwitch | 更新日期: 2023-09-27 18:03:25
我知道还有其他问题张贴,似乎是相同的问题,但没有一个解决我的问题。
我是WPF的新手,我正试图将程序从WinForms转换为WPF。我有一个主窗口,"kproject . forms . frmlogin",继承了一个基类,"kproject . forms . frmswitch",继承了System.Windows.Window类。当我遇到上述问题时,我的初始XAML代码是:
<Control:frmSwitch x:Class="Kproj.Forms.frmLogin"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Control="clr-namespace:Kproj.Forms"
mc:Ignorable="d"
Title="LOG IN" Height="309" Width="678">
<Grid Height="271" Width="662">
... Content
</Grid>
</Control:frmSwitch>
在代码后面:
namespace Kproj.Forms
{
public partial class frmLogin : frmSwitch
{
}
}
namespace Kproj.Forms
{
public partial class frmSwitch : Window
{
}
}
经过进一步的研究,我发现我需要将frmSwitch变成一个没有XAML的基类。因此,我以一般的Class形式创建了frmSwitch2,如下所示:
namespace Kproj.Forms
{
public class frmSwitch2 : Window
{
}
}
然后我相应地调整了主窗口的XAML:
<Control:frmSwitch2 x:Class="Kproj.Forms.frmLogin"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Control="clr-namespace:Kproj.Forms"
mc:Ignorable="d"
Title="LOG IN" Height="309" Width="678">
<Grid Height="271" Width="662">
... Content
</Grid>
</Control:frmSwitch2>
和主窗口代码:
namespace Kproj.Forms
{
public partial class frmLogin : frmSwitch
{
}
}
现在,我丢失了原来的错误消息,但是我获得了一条声明
的消息。"The name 'frmSwitch2' does not exist in the namespace 'clr-namespace:FITS.Forms'."
,即使当我在主窗口XAML中输入"Control:"时,它提示"frmSwitch2",所以它知道它确实存在于名称空间中。有什么建议吗?
免责声明:我试着尽可能地研究它,但是我在StackOverflow上发现的所有帖子都是这个问题,但是所有的帖子都是通过从XAML'cs部分类转换到单独的代码-后面的完整XAML-less类来修复的。
在研究了继承的实际需求之后,我了解到继承的唯一目的是用于变量,所以我能够使它工作,但只是将它们转换为静态全局变量并直接访问它们。最后我根本不需要遗产了。
如果其他人,最终知道更多的MVVM,确实遇到了这个问题的修复,那将是很高兴知道它。