Ответ 1
Похоже, это был излом в Visual Studio 2008.
Если я создаю новый файл (т.е. Title2), скопируйте/вставьте код и XAML, а затем измените все "Title" на "Title2", все снова отлично работает.
Это очень странно.
У меня есть файл 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 "не существует в текущем контексте".
Как я могу исправить эту проблему?
Похоже, это был излом в Visual Studio 2008.
Если я создаю новый файл (т.е. Title2), скопируйте/вставьте код и XAML, а затем измените все "Title" на "Title2", все снова отлично работает.
В одном случае я видел это, когда вы копируете вставку XAML control/window и т.д. Метод InitializeComponent существует в соответствующем файле .g.cs, который автоматически генерируется. В моем случае после копирования вставки Действие сборки для XAML (в окне "Свойства" ) было изменено на "Ресурс". Я изменил его на "Страница" , и он начал нормально работать.
Надеюсь, это поможет.
Нить, которая помогла мне в этом, была Название 'InitializeComponent' не существует....
Ваш XAML говорит:
x:Class="ix.Production.Title"
тогда как фактический класс ix.Outage.Title
. Либо измените объявление XAML, либо переместите класс в пространство имен ix.Production
.
Так просто, но так легко пропустить: MainWindow
x:Class
был установлен на "MainWindow
", если он должен был быть установлен на namespace.MainWindow
(x:Class="namespace.MainWindow"
). Если это не сделано, то файл MainWindow.g.xaml
не будет содержать блок пространства имен, а вызов конструктора InitializeComponent()
в MainWindow
не будет работать.
Хотя это, очевидно, не решение проблемы willem, я разместил ее здесь, потому что в списке есть много других решений. Надеюсь, это поможет кому-то другому, кто спотыкается об этом посту, пытаясь исправить свою проблему.
Пространства имен не совпадают:
x:Class="ix.Production.Title"
namespace ix.Outage { ...
Обычно я получаю эту проблему при переименовании пользовательских классов управления или, как в вашем случае, при изменении имени пространства имен классов. Если вы не используете рефакторинг Visual Studio, вы должны вручную изменить имена в файлах XAML и С#.
Рефакторинг хорош только тогда, когда вы просто переименовываете класс, для переименования пространства имен вы должны сделать это вручную.
Для InitializeComponent
найдите [Project Folder]\obj\Debug\<class_name.g.cs>
.
У меня была та же проблема с образцом проекта 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, я думаю.
Мне не удалось найти InitializeComponent и другие биты пользовательского интерфейса, связанные с XAML, из кода за тот же момент, когда я добавлю свой PCL (который содержит мои классы данных) в решение.
: |
Но если я удалю PCL один, его можно найти снова.
Независимо от того, найден ли он или нет, я все еще могу скомпилировать. Я просто не могу автозаполнять, когда я набираю код.
Возможно, у вас есть проект PCL в вашем решении? (Я еще не знаю, как это исправить)
Ваш класс является частичным, поэтому у вас должен быть другой файл, который содержит некоторые другие части вашего класса Title (например, метод InitializeComponent). Попробуйте найти этот файл и посмотрите, совпадает ли пространство имен в этом файле с пространством имен файла, содержащего другие части вашего класса.
Я боролся с той же проблемой здесь. Я сделал, чтобы удалить ВСЕ созданные файлы, отменив папку отладки, а затем перестроить решение.
С уважением, Petrus
Я столкнулся с той же проблемой, когда получил образец проекта из msdn. проблема заключалась в том, что это был проект 4.0, и у меня не было 4.0 в моей системе, несколько ссылочных DLL отсутствовали (system.xaml и еще один) удалили их. попытался скомпилировать, всегда бросать метод initializecomponent не найден. вошедшие в свойства проекта изменили целевую структуру на 3.5 и больше не жалуются.
FWIW, я столкнулся с той же проблемой сегодня после переноса решения Visual Studio 2008 на Visual Studio 2010. Похоже, что миграция прошла, и проекты потеряли свой Target Framework
(в свойствах проекта): теперь параметр пуст!?
Настройка .NET Framework 3.5
решила проблему.
Это произошло со мной, потому что Visual Studio устанавливает "действие сборки" на случайное действие, когда вы копируете/вставляете или перемещаете файл XAML из одного проекта в другой в рамках решения.
Решение. Убедитесь, что для вашего "действия сборки" установлено значение для страницы XAML.
Я надеюсь, что это поможет, если это будет тот же случай для вас.