Почему Visual Studio не может найти мой метод WPF InitializeComponent? - PullRequest
48 голосов
/ 05 июня 2009

Это очень странно.

У меня есть 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 ]

48 голосов
/ 21 сентября 2010

В одном случае я видел это, когда вы копировали, вставляли элемент управления / окно XAML и т. Д. Метод InitializeComponent существует в соответствующем файле .g.cs, который создается автоматически. В моем случае после вставки копии Build Action для XAML (в окне свойств) было изменено на «Ресурс». Я изменил его на "Page" , и он начал работать нормально.

Надеюсь, это поможет.

Тема, которая помогла мне с этим, была Имя 'InitializeComponent' не существует ... .

34 голосов
/ 05 июня 2009

Ваш XAML говорит:

x:Class="ix.Production.Title"

, а фактический класс - ix.Outage.Title. Измените объявление XAML или переместите класс в пространство имен ix.Production.

14 голосов
/ 08 марта 2011

Так просто, но так легко не заметить: MainWindow s x:Class было установлено на "MainWindow", когда должно было быть установлено namespace.MainWindow (x:Class="namespace.MainWindow") Если этого не сделать, то файл MainWindow.g.xaml не будет содержать блок пространства имен, и вызов InitializeComponent() в конструкторе MainWindow не будет работать.

Хотя это, очевидно, не является решением проблемы Виллема, я разместил его здесь, потому что в списке так много других решений. Надеемся, что это поможет кому-то еще, кто наткнется на этот пост, пытаясь решить их проблему.

5 голосов
/ 05 июня 2009

Ваши пространства имен не совпадают:

x:Class="ix.Production.Title"
namespace ix.Outage { ...
2 голосов
/ 02 апреля 2011

Обычно эта проблема возникает при переименовании пользовательских классов управления или, как в вашем случае, при изменении имени пространства имен класса. Если вы не используете рефакторинг в Visual Studio, вам придется вручную изменить имена в файлах XAML и C #.

Рефакторинг хорош только тогда, когда вы просто переименовываете класс, для переименования пространства имен вы должны делать это вручную.

Для InitializeComponent смотрите [Project Folder]\obj\Debug\<class_name.g.cs>.

1 голос
/ 13 апреля 2015

Я не могу найти InitializeComponent и другие биты пользовательского интерфейса, связанные с XAML, из кода, стоящего за моментом добавления моего PCL (который содержит мои классы данных) в решение.

: |

Но если я удалю PCL один .. его можно найти снова.

Независимо от того, найден он или нет - я все еще могу скомпилировать. Я просто не могу автозаполнить, когда набираю код.

Может быть, у вас есть проект PCL в вашем решении? (Пока не знаю как это исправить)

1 голос
/ 08 сентября 2010

У меня была та же проблема с примером проекта Visual Studio 2010, которую я вручную вернул в Visual Studio 2008. Я обнаружил, что забыл установить Target Framework проекта на .NET Framework 3.5. Он был пустым в проекте, возвращенном к Visual Studio 2008, первоначально установленному в 4.0 в исходном проекте Visual Studio 2010.

Чтобы установить Target Framework проекта, перейдите в свойства проекта, перейдите на первую вкладку под названием Приложение и выберите .NET Framework 3.5 в раскрывающемся списке Target Framework.

Конечно, я бы предпочел, чтобы Visual Studio выдала мне ошибку или, по крайней мере, предупреждение о том, что я не установил свой Target Framework, но, я думаю, это часть разработки в Visual Studio.

Visual Studio 2008 WPF project properties

0 голосов
/ 09 октября 2018

Когда все пространства имен корректны, изменение целевой платформы с x86 на x64 или наоборот и повторная сборка проекта часто делают свое дело.

0 голосов
/ 14 июля 2015

Это произошло со мной, потому что Visual Studio устанавливает для "Действия сборки" случайное действие при копировании / вставке или перемещении файла XAML из одного проекта в другой в решении.

Решение: убедитесь, что для вашего "Действия сборки" задана страница XAML.

Надеюсь, это поможет, если это то же самое для вас.

0 голосов
/ 06 сентября 2011

FWIW, я столкнулся с той же проблемой сегодня после миграции решения Visual Studio 2008 в Visual Studio 2010. Похоже, что миграция дурачилась, и проекты потеряли свои Target Framework (в свойствах проекта): параметр теперь пуст!

Установка .NET Framework 3.5 решила проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...