我经常发现,当我在"原型设计"时,我更改了类背后的代码的基本类型,或者类似的东西,这两个文件变得完全不知道彼此。例:
XAML:
<UserControl x:Class="G4S.XTime.Modules.Employees.Details.Views.EmployeeGridView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
...
代码隐藏:
namespace G4S.XTime.Modules.Employees.Details.Views
{
public sealed partial class EmployeeGridView: UserControl
{
public EmployeeGridView()
{
//InitializeComponent();
}
}
}
调用InitializeComponent
会产生编译时错误,指出它不存在。
这种断开连接现象经常发生,足以花费我的时间,我通常只是从两个文件中复制代码,删除视图,添加具有相同名称的新视图,粘贴相同的代码,一切正常。
连接两个文件时,我缺少什么?在项目文件中,我看到代码隐藏依赖于 XAML,所以我认为如果我注释掉InitializeComponent
,然后仅使用 XAML 进行编译,我将拥有代码隐藏部分类的另一部分。但这行不通。它似乎根本不编译 XAML,除非背后有代码。
在大多数情况下,我该怎么做才能重新连接这两个文件?
编辑您的项目文件,并确保你具有类似于以下内容的内容:
<Compile Include="EmployeeGridView.xaml.cs">
<DependentUpon>EmployeeGridView.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
对我来说,问题是由于没有正确的方法将文件包含在csproj文件中引起的。
不對:
<CodeAnalysisDictionary Include="WindowsConnectionSecuritySettings.xaml">
正确:
<Page Include="WindowsConnectionSecuritySettings.xaml">
当我将项移动到新项目时,就会发生这种情况
确保 xaml 顶部的声明与具有完整路径(包括命名空间)的文件背后的代码匹配。
例如。如果命名空间名称为"MyControls",类背后的代码为"MyNewControl",则XAML 声明应该是类似 ..
<UserControl x:Class="MyControls.MyNewControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Height="41" Width="77"
>
后面的代码将是..
namespace MyControls
{
/// <summary>
/// Interaction logic for MyNewControl.xaml
/// </summary>
public partial class MyNewControl: UserControl
{
#region Constructors
public MyNewControl()
{
InitializeComponent();
}
#endregion
}
}
在剪切粘贴我的 XAML 后,我遇到了同样的问题(找不到初始化组件)。这里建议的答案解决了我的问题。建议在 XAML 的"属性"窗口中,将"生成操作"更改为"页"。显然,复制粘贴可以将"生成操作"更改为"资源"。
希望这有帮助!
[编辑] 我只是想补充一点,这也是在更新代码隐藏和 xaml 中的命名空间之后:
x:Class="NewNamespace.CodeBehindClass"