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

"Kproj.Forms.frmSwitch" cannot be the root of a XAML file because it was defined using XAML

我知道发布的其他问题似乎是同一问题,但 none 解决了我的问题。

我是 WPF 新手 我正在尝试将程序从 WinForms 转换为 WPF。我有一个主要的 window、"Kproj.Forms.frmLogin",它继承了一个基础 class、"Kproj.Forms.frmSwitch",它继承了 System.Windows.Window class。当我遇到上述问题时,我的初始 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。因此,我以一般 Class 形式创建了 frmSwitch2,如下所示:

namespace Kproj.Forms
{
    public class frmSwitch2 : Window
    {
    }
}

然后我相应地调整了主 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>

和主要的 window 代码隐藏到:

namespace Kproj.Forms
    {
        public partial class frmLogin : frmSwitch
        {
        }
    }

现在,我丢失了原始错误消息,但我收到了一条消息,指出

"The name 'frmSwitch2' does not exist in the namespace 'clr-namespace:FITS.Forms'."

即使当我在主 window XAML 中键入 "Control:" 时它提示 "frmSwitch2",所以它知道它确实存在于命名空间中。有什么建议吗?

免责声明:我尝试尽可能地研究它,但我在 Whosebug 上找到的所有帖子都是这个问题,但都通过从 XAML\cs 部分 classes to solo code-behind full XAML-less class.

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

如果其他任何人,最终了解更多 MVVM,确实遇到了此问题的修复程序,那么知道它会很高兴。虽然现在不需要了,但是学习还是不错的