“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类来修复的。

“Kproj.Forms.frmSwitch"不能是XAML文件的根,因为它是使用XAML定义的

在研究了继承的实际需求之后,我了解到继承的唯一目的是用于变量,所以我能够使它工作,但只是将它们转换为静态全局变量并直接访问它们。最后我根本不需要遗产了。

如果其他人,最终知道更多的MVVM,确实遇到了这个问题的修复,那将是很高兴知道它。