Подтвердить что ты не робот

Почему Visual Studio не может найти мой метод InitializeComponent 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 "не существует в текущем контексте".

Как я могу исправить эту проблему?

4b9b3361

Ответ 1

Похоже, это был излом в Visual Studio 2008.

Если я создаю новый файл (т.е. Title2), скопируйте/вставьте код и XAML, а затем измените все "Title" на "Title2", все снова отлично работает.

Ответ 2

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

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

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

Ответ 3

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

x:Class="ix.Production.Title"

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

Для InitializeComponent найдите [Project Folder]\obj\Debug\<class_name.g.cs>.

Ответ 7

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

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

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

Visual Studio 2008 WPF project properties

Ответ 8

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

: |

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

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

Возможно, у вас есть проект PCL в вашем решении? (Я еще не знаю, как это исправить)

Ответ 9

Ваш класс является частичным, поэтому у вас должен быть другой файл, который содержит некоторые другие части вашего класса Title (например, метод InitializeComponent). Попробуйте найти этот файл и посмотрите, совпадает ли пространство имен в этом файле с пространством имен файла, содержащего другие части вашего класса.

Ответ 10

Я боролся с той же проблемой здесь. Я сделал, чтобы удалить ВСЕ созданные файлы, отменив папку отладки, а затем перестроить решение.

С уважением, Petrus

Ответ 11

Я столкнулся с той же проблемой, когда получил образец проекта из msdn. проблема заключалась в том, что это был проект 4.0, и у меня не было 4.0 в моей системе, несколько ссылочных DLL отсутствовали (system.xaml и еще один) удалили их. попытался скомпилировать, всегда бросать метод initializecomponent не найден. вошедшие в свойства проекта изменили целевую структуру на 3.5 и больше не жалуются.

Ответ 12

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

Настройка .NET Framework 3.5 решила проблему.

Ответ 13

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

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

Я надеюсь, что это поможет, если это будет тот же случай для вас.