2009-06-05 3 views
42

Это очень странно.Почему 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 «не существует в текущем контексте».

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

+0

Arg, глупая опечатка с моей стороны (у меня есть два похожих проекта). Пространство имен классов действительно правильно, но я все равно получаю ту же ошибку. – willem

ответ

0

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

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

0

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

+0

Это говорит о частичном ... но мне интересно, если фактический InitializeComponent не создается где-то WPF? Я не уверен. Не смогли его найти. – willem

30

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

x:Class="ix.Production.Title" 

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

+0

Это! Visual Studio не нравится копировать-вставить и пространства имен ... –

+0

Спасибо, скопировать пачку снова не получается :) – Yablargo

5

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

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

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

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

0

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

1

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

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

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

Visual Studio 2008 WPF project properties

44

Один случай я видел, как это происходит в при копировании вставить управление XAML/окно и т.д. Метод InitializeComponent существует в соответствующем .g.cs файл, который автоматически генерируется. В моем случае после копирования пасты, Build Action для XAML (в окне «Свойства») было изменено на «Resource». I изменил его на «Страница», и он начал нормально работать.

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

Поток, который помог мне в этом, был The name 'InitializeComponent' does not exist....

+2

У меня эта проблема много при копировании и вставке, замечательно знать, чтобы проверить это. – cab

+0

Yap, только что возникла эта проблема при копировании файлов XAML между проектами –

+3

+1 У меня получилось изменено на 'CodeAnalysisDictionary' после операции Cut & Paste ... хороший Microsoft! Все исправлено после установки его на страницу «Страница». Большое спасибо gp. – Sheridan

13

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

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

2

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

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

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

+1

Или просто удалите весь файл \ obj и позвольте Visual Studio перестроить его – JordanBean

+0

Или что, я собирался получить полный ответ :) –

0

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

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

1

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

: |

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

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

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

0

Это случилось со мной, потому что Visual Studio устанавливает «Строят действие» в какой-то случайный действия при копировании/вставки или переместить файл XAML из одного проекта в другой в рамках решения.

Решение: Убедитесь, что ваше «действие сборки» установлено на страницу для вас XAML.

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

Смежные вопросы