为什么Visual Studio找不到我的WPF InitializeComponent方法?

时间:2009-06-05 08:41:50

标签: wpf

这很奇怪。

我有一个XAML文件,如下所示......

<Window
    x:Name="window"
    x:Class="ix.Production.Title"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Title" Height="768" Width="1024"
    Loaded="window_Loaded">

    <Window.Resources>
   etc...

我的代码旁边的内容如下......

using System;
using System.Windows;
using System.Windows.Media.Animation;
using System.Threading;

namespace ix.Production
{
    public partial class Title : Window
    {
        public Title()
        {
           InitializeComponent();
        }
    ....

此代码拒绝编译,因为Visual Studio坚持认为InitializeComponent“在当前上下文中不存在。”

如何解决此问题?

14 个答案:

答案 0 :(得分:48)

我在复制粘贴XAML控件/窗口等时遇到过这种情况。 InitializeComponent方法存在于自动生成的相应.g.cs文件中。就我而言,在复制粘贴后,XAML的构建操作(在“属性”窗口中)已更改为“资源”。我将其更改为“Page”,它开始正常运行。

我希望这会有所帮助。

帮助我的主题是 The name 'InitializeComponent' does not exist...

答案 1 :(得分:34)

您的XAML说:

x:Class="ix.Production.Title"

而实际的班级是ix.Outage.Title。更改XAML声明或将类移动到ix.Production命名空间。

答案 2 :(得分:14)

这么简单,但很容易被忽视:MainWindow的{​​{1}}被设置为“x:Class”,应该设置为MainWindow({{ 1}})。如果没有这样做,那么namespace.MainWindow文件将不包含命名空间块,并且x:Class="namespace.MainWindow"的构造函数中对MainWindow.g.xaml的调用将不起作用。

虽然这显然不是Willem问题的解决方案,但我在这里发布了它,因为列出了许多其他解决方案。希望这可以帮助那些在尝试解决问题时偶然发现这篇文章的人。

答案 3 :(得分:5)

您的命名空间不匹配:

x:Class="ix.Production.Title"
namespace ix.Outage { ...

答案 4 :(得分:2)

我在重命名自定义控件类时通常会遇到此问题,或者在您的情况下,更改类的命名空间的名称。如果您不使用Visual Studio的重构,则必须手动更改XAML和C#文件中的名称。

重构只有在重命名类时才有用,对于命名空间重命名,你必须手动完成。

对于InitializeComponent,请查看[Project Folder]\obj\Debug\<class_name.g.cs>

答案 5 :(得分:1)

我手动恢复到Visual Studio 2008的Visual Studio 2010示例项目遇到了同样的问题。我发现我忘记将项目的目标框架设置为.NET Framework 3.5。它在恢复到Visual Studio 2008的项目中是空的,最初在原始Visual Studio 2010项目中设置为4.0。

要设置项目的Target Framework,请转到项目属性,访问名为 Application 的第一个选项卡,然后在Target Framework下拉列表中选择.NET Framework 3.5。

当然,我更喜欢Visual Studio给我一个错误或至少警告我没有设置我的目标框架,但是,嘿,这是我在Visual Studio中开发的一部分,我想。

Visual Studio 2008 WPF project properties

答案 6 :(得分:1)

在我将PCL(包含我的数据类)添加到解决方案中的那一刻,我无法找到InitializeComponent和其他与XAML相关的UI位。

:|

但是,如果我删除PCL ..它可以再次找到。

无论是否发现 - 我仍然可以编译。当我输入代码时,我无法自动完成。

也许您的解决方案中有PCL项目? (我不知道如何解决这个问题)

答案 7 :(得分:0)

您的类是部分的,因此您应该有另一个文件包含Title类的其他部分(例如InitializeComponent方法)。 尝试找到该文件,并查看该文件中的命名空间是否等于包含该类其他部分的文件的命名空间。

答案 8 :(得分:0)

看起来这是Visual Studio 2008中的一个问题。

如果我创建一个新文件(即Title2),复制/粘贴代码和XAML,然后将所有'Title'更改为'Title2',一切正常。

答案 9 :(得分:0)

我在这里遇到同样的问题。我所做的是删除调试文件夹下的所有创建的文件,然后重建解决方案。

此致 Petrus的

答案 10 :(得分:0)

当我从msdn获得项目样本时,我遇到了同样的问题。问题是它是一个4.0项目,我的系统中没有4.0,几个引用的dll丢失(system.xaml和另一个)删除它们。试图编译,总是会抛出找不到的initializecomponent方法。进入项目属性将目标框架更改为3.5并且它不再抱怨了。

答案 11 :(得分:0)

FWIW,我在将Visual Studio 2008解决方案迁移到Visual Studio 2010后,今天遇到了同样的问题。看起来迁移过程中,项目丢失了Target Framework(在项目属性中):现在设置空!?

设置.NET Framework 3.5解决了问题。

答案 12 :(得分:0)

当我在解决方案中复制/粘贴或将XAML文件从一个项目移动到另一个项目时,Visual Studio会将“构建操作”设置为某些随机操作

解决方案:确保您的“构建操作”设置为XAML的页面。

如果你的情况相同,我希望这会有所帮助。

答案 13 :(得分:0)

当所有正确的名称空间时,将目标平台从x86更改为x64,反之亦然,并且重建项目通常可以解决问题。