wpf Имя «InitializeComponent» не существует в текущем контексте





15 Answers

Действие сборки для .xaml-файла также должно быть установлено на «Страница», при перемещении файла xaml между проектами этот параметр теряется (по крайней мере, в VS 2010).

wpf visual-studio-2010 visual-studio initializecomponent

Если я создам новый проект в Visual Studio 2010 с пакетом обновления 1 и выберите «Приложение WPF» и попытается создать сгенерированное приложение, я получаю ошибку

Имя «InitializeComponent» не существует в текущем контексте.

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

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

Что случилось?




это произошло со мной, когда я случайно удалил ссылку на класс из определения xaml:

Я заменил

<Window x:Class="myapp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

первая строка с этим:

<RibbonWindow 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

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




Для этого есть очень конкретная причина, и она находится в настройках проекта. Это обычно происходит, когда вы пытаетесь добавить элемент управления WPF / окно в библиотеку или проект класса .NET 2.0. Причина этой ошибки заключается в том, что проект не знает, что он создает элемент управления WPF или окно и поэтому пытается построить его как проект C # 2.0.

Решение включает в себя редактирование файла .csproj. Щелкните правой кнопкой мыши на проекте, вызывающем проблему, и выберите «Выгрузить проект». Щелкните правой кнопкой мыши выгруженный проект и выберите «Изменить .csproj». Откроется файл .csproj, и вы увидите XML. найдите следующую строку:

<Import Project=…..

Это ближе к концу файла, и единственная строка, которая у вас есть, вероятно,

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

Это говорит Visual Studio, что проект будет реализован как проект .NET 2.0. Мы хотим сказать, что Visual Studio это проект WPF, поэтому мы должны добавить следующую строку:

<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />

Эта строка сообщит Visual Studio, что проект будет реализован как проект WPF. Теперь ваше дно файла .csproj должно выглядеть так:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />

Сохраните файл .csproj, щелкните его правой кнопкой мыши в обозревателе решений и выберите «Перезапустить проект», и все, все готово!




Вы можете получить эту ошибку при импорте класса из другого проекта или изменении пути к файлу xaml или в пространстве имен файла xaml или за .cs.

Один: у него может быть пространство имен, которое не совпадает с тем, что у вас есть в вашем новом проекте

namespace TrainerB.MVC.Forms
{
     public partial class AboutDeveloper : ContentPage
     {
          public AboutDeveloper()
          {
               InitializeComponent();
          }
     }
}

Как вы видите, пространство имен в импортированном файле начинается со старого имени проекта: «TrainerB» , но ваш новый проект может иметь другое имя, поэтому просто измените его на правильное имя нового проекта в файле .xaml и за .cs-файлом.

Два:

измените свойства файла .xaml на:

Действие сборки: встроенный ресурс

Пользовательский инструмент: MSBuild: UpdateDesignTimeXaml




У меня было это (хотя это была моя ошибка и была вызвана после того, как я скопировал и вставил код); это может произойти, когда пространство имен не совпадает между XAML и кодом позади

НАПРИМЕР

<UserControl x:Class="DockPanel.TreeView" />

и код позади

namespace NotDockPanel



Я согласен с вышеприведенным ответом, что пространства имен должны совпадать. Тем не менее, у меня была проблема, подобная этой, когда пространства имен совпадали.

Чтобы исправить это, я просто изменил пространство имен в XAML на INCORRECT, сохраненный, а затем изменил его на CORRECT. Вуаля!




Выгрузите все решение, а затем снова загрузите его. Затем перестройте решение. Это решило проблему для меня.




Если вы используете Xamarin Forms, и вы перемещаете файл XAML, «действие сборки» файла изменяется. Xamarin Forms требует «build action = Embedded Resource».

Применить «действие сборки» в Visual Studio:

Select the XAML file -> Properties -> Build Action = Embedded Resource




Это решило это для меня.

Я прокомментировал ресурсы в файле App.xaml

<Application x:Class="MyApp.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Application.Resources>
    <!--<ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary
            Source="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>-->
  </Application.Resources>
</Application>

Комментирование thiis назад для исправления ошибки сборки.

<Application x:Class="MyApp.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Application.Resources>
    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary
            Source="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </Application.Resources>
</Application>

Копая немного глубже, я обнаружил, что файл app.g.cs в {Project} \ obj \ debug содержал только следующее, когда я оставил комментируемый ресурс.

/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public void InitializeComponent() {
    if (_contentLoaded) {
        return;
    }
    _contentLoaded = true;
    System.Uri resourceLocater = new System.Uri("/MyApp;component/app.xaml", System.UriKind.Relative);

    #line 1 "..\..\..\App.xaml"
    System.Windows.Application.LoadComponent(this, resourceLocater);

    #line default
    #line hidden
}



Если Пространства имен верны, то также есть одна и та же ошибка,

Просто закройте приложение и откройте его снова .

Это может решить вашу проблему







У меня была та же проблема: ожидайте, что я переустановил мой MainWindow xaml и cs в новый файл, а затем скопировал их обратно в исходное место. Затем я получил эту ошибку после попытки скомпилировать приложение WPF.

То, что я сделал, чтобы исправить эту ошибку, было переименовать пространство имен (из egNamespace -> egNamespaceNew, и оно снова сработало. Затем я изменил пространство имен на исходное.




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

Кстати, если вам интересно, разработка чего-то с сетевого диска - это плохая практика. Это становится особенно проблематичным, когда вы пытаетесь использовать управляемый код .NET; по моему опыту, он волнуется каждый раз, когда вы строите. Я забыл положить этот маленький проект выброса в правильную папку и в итоге заплатил цену.




Еще одно возможное объяснение заключается в том, что вы строите против x86. Щелкните правой кнопкой мыши свое решение и выберите Configuration Manager. Посмотрите, строите ли вы против x86 вместо Any CPU.




По какой-то причине после копирования .xaml и его .cs между проектами, действие сборки иногда меняется. Пожалуйста, убедитесь, что для сборки вашего .xaml используется страница.




Related