如何将XAML视图文件与其后面的代码重新连接?

时间:2014-02-27 13:25:04

标签: c# wpf xaml

我经常发现,当我''原型'时,我改变了类后面的代码的基本类型,或类似的东西,这两个文件完全没有意识到彼此。例如:

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。

在大多数情况下,我该怎么做才能重新连接这两个文件?

4 个答案:

答案 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
    }
}