【问题标题】:How do I reconnect a XAML view file with it's code behind file?如何重新连接 XAML 视图文件及其代码隐藏文件?
【发布时间】:2016-05-25 07:20:46
【问题描述】:

我经常发现,当我进行“原型设计”时,我更改了类后面代码的基本类型或类似的东西,这两个文件变得完全不知道彼此。示例:

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。

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

【问题讨论】:

  • 清理并重建解决方案

标签: c# wpf xaml


【解决方案1】:

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

<Compile Include="EmployeeGridView.xaml.cs">
  <DependentUpon>EmployeeGridView.xaml</DependentUpon>
  <SubType>Code</SubType>
</Compile>

【讨论】:

    【解决方案2】:

    对我来说,问题是由于没有正确的方式将文件包含在 csproj 文件中。

    不正确:

    <CodeAnalysisDictionary Include="Windows\ConnectionSecuritySettings.xaml">
    

    正确:

    <Page Include="Windows\ConnectionSecuritySettings.xaml">
    

    当我将项目移动到新项目时发生这种情况

    【讨论】:

    • 在 Resharper 的 Move 重构之后,这也发生在我身上。
    【解决方案3】:

    确保 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
        }
    }
    

    【讨论】:

      【解决方案4】:

      在剪切粘贴我的 XAML 后,我遇到了同样的问题(InitializeComponent 找不到)。 answer suggested here 解决了我的问题。建议是,在 XAML 的 Properties 窗口中,将 Build Action 更改为 Page。显然,复制粘贴可以将 Build Action 更改为 Resource

      希望这会有所帮助!

      [编辑] 我只是想补充一点,这也是在为代码隐藏和 xaml 更新命名空间之后:

          x:Class="NewNamespace.CodeBehindClass"      
      

      【讨论】:

        猜你喜欢
        • 2013-08-09
        • 1970-01-01
        • 2019-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多