如何将 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,除非背后有代码。

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

编辑您的项目文件,并确保你具有类似于以下内容的内容:

<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"      

最新更新