wpf c# - El nombre 'InitializeComponent' no existe en el contexto actual




studio visual (25)

Ya que este parece ser el hilo conductor del problema relacionado con la falta de "InitializeComponent", incluiré mi respuesta aquí.

Yo también tenía este problema y probé todo lo que encontré aquí y en todos los otros foros que Google pudo encontrar, sin embargo, ninguno resolvió el problema por mí. Después de dos horas de intentar todo, finalmente me di cuenta de lo que estaba mal con mi configuración.

En nuestro proyecto, estamos utilizando componentes de Metro de MahApps . La vista que me estaba dando problemas era una vista heredada de MetroWindow, como esta:

<Controls:MetroWindow x:Class="ProjectNamespace.MyView"
                      xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
                      ... >

Ahora, he definido mis recursos estáticos como

<Controls:MetroWindow.Resources>
    <prop:Resources x:Key="LocalizedStrings"/>
    ...
</Controls:MetroWindow.Resources>

Así es como he definido los Recursos en UserControl s en todas mis otras vistas, así que asumí que funcionará.

Sin embargo, ese no fue el caso de Controls:MetroWindow ! Allí necesité absolutamente la definición de recurso de la siguiente manera:

<Controls:MetroWindow.Resources>
    <ResourceDictionary>
        <prop:Resources x:Key="LocalizedStrings"/>
        ...
    </ResourceDictionary>
</Controls:MetroWindow.Resources>

Así que mi problema, en resumen, era una etiqueta <ResourceDictionary> faltante. Realmente no sé por qué esto produjo el error 'InitializeComponent' y extrañamente ni siquiera lo produjo en cada una de mis máquinas, pero así es como lo arreglé. Espero que esto ayude (el 0.001% restante de las personas que tienen este problema).

Si creo un nuevo proyecto en Visual Studio 2010 SP1 y selecciono "Aplicación WPF" e intento generar la aplicación generada, aparece el error

El nombre 'InitializeComponent' no existe en el contexto actual.

Recibí un error similar esta mañana cuando intenté construir mi proyecto actual. Ayer no tuve ningún problema en compilarlo y ejecutarlo.

Creé un nuevo proyecto y recibí el error cada vez que compilaba el proyecto. Acabo de enviar el proyecto a un colega y él acaba de compilarlo sin ningún error.

¿Qué está mal?


Esto me sucedió porque un desinstalador de paquetes Nuget eliminó todos los atributos en el elemento <Application> en App.xaml. Esto incluía el atributo x: Class, que especifica el nombre de la clase de la aplicación. Por lo tanto, la clase parcial que contiene el método InitializeComponent () nunca se generó.

Solucioné el problema al revertir App.xaml a la copia controlada por fuente.


Descargue la solución completa y luego vuelva a cargarla. Luego reconstruye la solución. Esto resolvió el problema para mí.


Para quienes lo encuentran en internet. Compruebe el archivo Windows.csproj si la compilación está allí. Debe haber 2 entradas

<Page Include="YourFile.xaml">
  <SubType>Designer</SubType>
  <Generator>MSBuild:Compile</Generator>
</Page>

<Compile Include="YourFile.xaml.cs">
  <DependentUpon>YourFile.xaml</DependentUpon>
</Compile>

  1. Navegue al directorio de soluciones
  2. Eliminar la carpeta \ obj
  3. Reconstruir la solución

Encontré este error durante la refactorización, donde cambié el nombre de algunos archivos / carpetas y los archivos * .g.cs que debían volver a generarse debían volver a generarse.



Acabo de encontrar este problema, y ​​resultó que mi proyecto está almacenado en mi carpeta de usuario, que está almacenada en la red, y tuvimos una interrupción momentánea de la red. Hice una compilación se quejó de que mis archivos se habían modificado fuera del editor (no lo habían hecho; los bloqueos de los archivos se han eliminado) y se generó correctamente, eliminando el error relacionado con el método InitializeComponent() .

Por cierto, en caso de que te lo preguntes, desarrollar algo desde una unidad de red es una mala práctica. Se vuelve particularmente problemático cuando intenta aprovechar el código administrado de .NET; en mi experiencia, se asusta cada vez que construyes. Olvidé poner este pequeño proyecto en la carpeta adecuada y terminé pagando el precio.


Asegúrate en el archivo xaml

<Page x:Class="Project1.Page1" ...

coincide con el nombre 'Proyecto1' y el nombre 'Página1'


Hay una razón muy específica para esto, y está en la configuración del proyecto. Esto suele suceder cuando intenta agregar un control / ventana de WPF a una biblioteca o proyecto de clase .NET 2.0. El motivo de este error es que el proyecto no sabe que está construyendo un control o ventana de WPF y, por lo tanto, intenta construirlo como un proyecto C # 2.0.

La solución consiste en editar el archivo .csproj. Haga clic derecho en el proyecto que causa el problema y seleccione "Descargar proyecto". Haga clic derecho en el proyecto descargado y seleccione "Editar .csproj". El archivo .csproj se abrirá y podrá ver el XML. busca la siguiente línea:

<Import Project=…..

Está cerca del final del archivo, y la única línea que tiene es probablemente

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

Esto le dice a Visual Studio que genere el proyecto como un proyecto .NET 2.0. Lo que queremos hacer es decirle a Visual Studio que esto es en realidad un proyecto WPF, por lo que debemos agregar la siguiente línea:

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

Esta línea le indicará a Visual Studio que genere el proyecto como un proyecto WPF. Ahora la parte inferior de tu archivo .csproj debería verse así:

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

Guarde el archivo .csproj, haga clic con el botón derecho en el Explorador de soluciones y seleccione la compilación "Recargar proyecto" y listo. ¡Ya está todo listo!


Puede obtener este error cuando importe una clase de otro proyecto, o cambie la ruta del archivo xaml, o el espacio de nombres del archivo xaml o detrás de .cs.

Uno: puede tener un espacio de nombres que no sea el mismo que el que tiene en su nuevo proyecto

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

Como puede ver, el espacio de nombres en el archivo importado comienza con el nombre antiguo del proyecto: "TrainerB" , pero su nuevo proyecto puede tener un nombre diferente, así que simplemente cámbielo al nombre correcto del nuevo proyecto, tanto en el archivo .xaml como el archivo .cs detrás.

Dos:

cambia las propiedades del archivo .xaml a:

Acción de construcción: Recurso incrustado

Herramienta personalizada: MSBuild: UpdateDesignTimeXaml


Me he encontrado con esto un par de veces y sigo olvidando las causas. Me encontré con esto cuando renombré el espacio de nombres en mi código detrás del archivo pero no en mi XAML.

Así que comprueba si has hecho lo mismo.

El espacio de nombres y los nombres de clase deben coincidir, ya que ambos forman parte de una clase parcial

namespace ZZZ
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow
    {
         //...
    }
}

<!-- XAML -->
<Window x:Class="ZZZ.MainWindow">

Otra solución a este problema es simplemente cambiar la propiedad-> Crear acción en el XAML desde el recurso incorporado a cualquier otra cosa, guardar, y luego cambiarlo de nuevo a recurso integrado. El error desaparece.


Otra causa común de este error es si hiciste algo en esto:

  1. Haga clic derecho en la carpeta en el proyecto para crear un nuevo UserControl. Esto crea una clase y un archivo xaml que se deriva del control del usuario en el espacio de nombres de la carpeta.

  2. Entonces decides cambiar el espacio de nombres de la clase porque realmente solo estás utilizando carpetas para la organización del código. El atributo x: Class no se actualizará automáticamente, por lo que buscará una clase que no exista. Probablemente podría usar un mejor mensaje de error como "x: No se pudo encontrar el tipo de clase en namesace bla.blaa.blaaa".


Si está utilizando Xamarin Forms y mueve un archivo XAML, se modifica la "acción de compilación" del archivo. Xamarin Forms requiere "build action = Embedded Resource".

Aplicar "acción de construcción" en Visual Studio:

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


La acción de compilación para el archivo .xaml también debe configurarse en "Página", cuando se mueve un archivo xaml entre proyectos, esta configuración se pierde (al menos en VS 2010).


Ninguna de las respuestas anteriores funcionó para mí. Los probé todos excepto los duplicados. Sin embargo, por alguna extraña razón, esto funcionó en mi proyecto multiplataforma en Visual Studio 2015:

  1. Haga clic derecho en el proyecto que está causando el problema en el Explorador de soluciones. En el menú emergente, elija: Agregar -> Clase
  2. Seleccione multiplataforma -> Forms Xaml Page. Mantenga el bonito nombre estándar de Page1.cs y haga clic en Agregar.
  3. Observe cómo el problema InitializeComponent () anterior simplemente desapareció por alguna razón.
  4. Elimine el Page1.cs creado recientemente y continúe la programación como si Visual Studio funcionara bien.

Después de alguna acción, el espacio de nombres del archivo .cs y el del archivo .xaml pueden ser diferentes (en xaml busque la x: Class = "namespace.yourType").

Arreglarlos para que sean los mismos.


esto sucedió conmigo cuando eliminé accidentalmente la referencia de clase de la definición de xaml:

He reemplazado el

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

primera linea con esto:

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

Sé que esta no es la respuesta a la pregunta original (porque ese proyecto se basa en otra máquina), pero el mensaje de error era el mismo, así que tal vez ayude a alguien con esta situación.


He tenido esto (aunque fue mi culpa y fue causado después de que copié y pegué algo de código); puede ocurrir cuando el espacio de nombres no coincide entre el XAML y el código detrás

P.EJ

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

y el código detrás es

namespace NotDockPanel

Intento todas las sugerencias anteriores. Si lo intentas también sin éxito conseguirás el camino más fácil. Cree un nuevo page.xaml, luego copie su código para la nueva clase y elimine la clase XAML con problemas. No pases más tiempo.


Me encontré con esto al cambiar el nombre de un control de usuario. La forma en que lo arreglé fue comentar InitializeComponent, verificar que todos los nombres eran correctos (xaml y código detrás), compilar el proyecto, descomentar InitializeComponent y luego compilar nuevamente. Parece que puede haber un par de causas / soluciones para este problema, pero de esta manera lo hice por mí.


Estoy de acuerdo con la respuesta anterior de que los espacios de nombres deben coincidir. Sin embargo, tuve un problema como este en el que coincidían los espacios de nombres.

Para solucionarlo, simplemente cambié el espacio de nombres en el XAML a uno INCORRECTO, lo guardé y luego lo cambié de nuevo al CORRECTO. Voila!


Debido a algún motivo después de copiar .xaml y es .cs entre proyectos, la acción de compilación a veces cambia. Por favor, asegúrese de que la acción de compilación de su .xaml es Página.


Esto lo resolvió para mí.

Había comentado los recursos en el archivo 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>

Comentando esto de nuevo para corregir el error de compilación.

<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>

Al profundizar un poco más, encontré que el archivo app.g.cs en {Proyecto} \ obj \ debug solo contenía lo siguiente cuando dejé el recurso comentado.

/// <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
}

Compruebe la versión de cvtrs.exe :

dir "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe"

Versión equivocada:
date : 18/03/2010
time : 01:16 PM
size : 31,048 bytes
name : cvtres.exe

Versión correcta:
date : 21/02/2011
time : 06:03 pm
size : 31,056 bytes
name : cvtres.exe

Si tiene una versión incorrecta, debe copiar la versión correcta de:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cvtres.exe

y reemplaza el de aquí:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe

es decir

copy "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cvtres.exe" "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe"




wpf visual-studio-2010 visual-studio initializecomponent