【发布时间】:2016-08-25 22:33:47
【问题描述】:
我知道发布的其他问题似乎是相同的问题,但没有一个能解决我的问题。
我是 WPF 新手,我正在尝试将程序从 WinForms 转换为 WPF。我有一个主窗口“Kproj.Forms.frmLogin”,它继承了一个基类“Kproj.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-低级。
【问题讨论】:
-
在 WPF 中,通常主窗口只是一个外壳,它只包含其他用户如何控制的网格区域。从重新安排您的主窗口开始,以包含网格行和列,因为您想要布置的东西。然后创建其他控件,因为您希望它们彼此分开,例如UCTitle 用于标题,UCNav 用于导航,UCStatus 用于状态栏,UCMain 用于主窗口中的主要区域。然后使用包含而不是继承..如果你真的需要继承那么你真的需要学习 MVVM
标签: c# wpf winforms xaml wpf-controls