我经常发现,当我''原型'时,我改变了类后面的代码的基本类型,或类似的东西,这两个文件完全没有意识到彼此。例如:
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。
在大多数情况下,我该怎么做才能重新连接这两个文件?
答案 0 :(得分:2)
编辑项目文件并确保您有类似的内容:
<Compile Include="EmployeeGridView.xaml.cs">
<DependentUpon>EmployeeGridView.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
答案 1 :(得分:1)
对我来说,问题是由于没有正确的方法将文件包含在csproj文件中。
不正确的:
<CodeAnalysisDictionary Include="Windows\ConnectionSecuritySettings.xaml">
正确的:
<Page Include="Windows\ConnectionSecuritySettings.xaml">
当我将项目移动到新项目时发生了这种情况
答案 2 :(得分:0)
在我的XAML剪切粘贴后,我遇到了同样的问题(无法找到 InitializeComponent )。 answer suggested here解决了我的问题。建议是,在XAML的属性窗口中,将构建操作更改为页面。显然,复制粘贴可以将构建操作更改为资源。
希望这有帮助!
[编辑]我只是想补充一点,这也是在为代码隐藏和xaml更新命名空间之后:
x:Class="NewNamespace.CodeBehindClass"
答案 3 :(得分:0)
确保xaml顶部的声明与文件后面的代码匹配,包括完整路径,包括命名空间。
例如。如果命名空间名称是&#34; MyControls&#34;和Class背后的代码是&#34; MyNewControl&#34;然后 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
}
}