2009-06-05 11 views
42

Esto es muy extraño.¿Por qué no puede Visual Studio encontrar mi método WPF InitializeComponent?

Tengo un archivo XAML que se ve de la siguiente manera ...

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

Y mi código-lado que se ve de la siguiente manera ...

using System; 
using System.Windows; 
using System.Windows.Media.Animation; 
using System.Threading; 

namespace ix.Production 
{ 
    public partial class Title : Window 
    { 
     public Title() 
     { 
      InitializeComponent(); 
     } 
    .... 

Este código se niega a compilar porque Visual Studio insiste en que InitializeComponent "no existe en el contexto actual".

¿Cómo puedo solucionar este problema?

+0

Arg, tonto error de mi parte (tengo dos proyectos similares). El espacio de nombres de la clase es en realidad correcto, pero sigo teniendo el mismo error. – willem

Respuesta

0

Parece que esto fue una torcedura en Visual Studio 2008.

Si se crea un nuevo archivo (es decir Title2), copiar/pegar el código y XAML, luego cambia todo el 'Título' a 'Título 2', todo vuelve a funcionar bien.

0

Su clase es parcial, por lo que debe tener otro archivo que contenga algunas otras partes de su clase de Título (el método InitializeComponent, por ejemplo). Trate de encontrar ese archivo, y vea si el espacio de nombres en ese archivo, es igual al espacio de nombres del archivo que contiene las otras partes de su clase.

+0

Dice parcial ... pero me pregunto si el InitializeComponent real no es generado en alguna parte por WPF? No estoy seguro. No he podido encontrarlo – willem

30

Su XAML dice:

x:Class="ix.Production.Title" 

mientras que la clase real es ix.Outage.Title. Cambie la declaración XAML o mueva la clase al espacio de nombre ix.Production.

+0

Esto! A Visual Studio no le gusta copiar y pegar y espacios de nombres ... –

+0

Gracias, copiar y pegar vuelve a salir mal :) – Yablargo

5

Sus espacios de nombres no coinciden:

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

Estaba lidiando con el mismo problema aquí. Lo que hice fue eliminar TODOS los archivos creados en la carpeta de depuración y luego reconstruir la solución.

Saludos, Petrus

0

me había encontrado el mismo problema cuando me dieron una muestra de proyectos de MSDN. el problema era que era un proyecto 4.0 y no tenía el 4.0 en mi sistema, faltaban unos cuantos dlls referenciados (system.xaml y otro) y los eliminaba. intentado compilar, siempre arrojaría el método initializecomponent no encontrado. entró en las propiedades del proyecto cambió el marco de destino a 3.5 y ya no se queja.

1

he tenido el mismo problema con un proyecto   2010 de Visual Studio   que yo invertí manualmente a Visual Studio     2008. Me di cuenta de que había olvidado para establecer el marco de destino del proyecto a .NET Framework 3.5. Estaba vacío en el proyecto revertido a Visual   Studio   2008, inicialmente establecido en 4.0 en el proyecto original Visual   Studio   2010.

Para establecer el Marco de objetivos de un proyecto, vaya a las propiedades del proyecto, acceda a la primera pestaña llamada Aplicación, y seleccione .NET Framework 3.5 en el menú desplegable de Target Framework.

Por supuesto, preferiría que Visual Studio me diera un error o al menos una advertencia de que no había configurado mi Target Framework, pero bueno, eso es parte del desarrollo en Visual Studio, supongo.

Visual Studio 2008 WPF project properties

44

Uno de los casos que he visto que esto suceda en al copiar pegar un control XAML/ventana, etc. existe El método InitializeComponent en un archivo .g.cs correspondiente que se genera de forma automática. En mi caso, después de copiar y pegar, Build Action para XAML (en la ventana Propiedades) se cambió a "Recurso". I lo cambié a "Página", y comenzó a funcionar bien.

Espero que esto ayude.

El hilo que me ayudó con esto fue The name 'InitializeComponent' does not exist....

+2

Tengo este problema mucho al copiar y pegar, me alegra saber esto. – cab

+0

Yap, acaba de tener este problema al copiar archivos XAML entre proyectos –

+3

+1 La mía se cambió a 'CodeAnalysisDictionary' después de una operación de cortar y pegar ... ¡muy bien, Microsoft! Todo arreglado después de configurarlo de nuevo a 'Página'. Muchas gracias gp. – Sheridan

13

Tan simple, pero tan fácil pasar por alto: MainWindow 's x:Class se ajusta a "MainWindow", cuando debería haberse fijado a namespace.MainWindow (x:Class="namespace.MainWindow"). Si esto no se hace, entonces el archivo MainWindow.g.xaml no incluirá un bloque de espacio de nombres, y la llamada al InitializeComponent() en el constructor MainWindow no funcionará.

Aunque esto obviamente no es una solución al problema de willem, lo publiqué aquí porque hay muchas otras soluciones en la lista. Con suerte, esto ayudará a alguien más que tropieza con esta publicación cuando intenta solucionar su problema.

2

Normalmente recibo este problema al cambiar el nombre de las clases de control personalizadas o, como en su caso, cambiar el nombre del espacio de nombres de la clase. Si no utiliza la refactorización de Visual Studio, entonces debe cambiar manualmente los nombres en los archivos XAML y C#.

La refabricación solo sirve para cambiar el nombre de la clase, para cambiar el nombre del espacio de nombres, debe hacerlo manualmente.

Para InitializeComponent, busque en [Project Folder]\obj\Debug\<class_name.g.cs>.

+1

O simplemente elimine todo el archivo \ obj y deje que Visual Studio lo reconstruya – JordanBean

+0

O eso, iba a obtener una respuesta completa :) –

0

Fwiw, me golpeó el mismo problema hoy en día después de la migración de un Visual Studio     2008 solución a Visual Studio     2010. Parece que la migración metió la pata y los proyectos perdieron su Target Framework (en Propiedades del proyecto): El ajuste se ahora vacío?

Configuración .NET Framework 3.5 ha resuelto el problema.

1

No puedo encontrar InitializeComponent y otros bits de IU relacionados con XAML a partir del código que se encuentra detrás del momento en que agrego mi PCL (que contiene mis clases de datos) a la solución.

: |

Pero si elimino el PCL uno ... se puede encontrar de nuevo.

Independientemente de si se encuentra o no, aún puedo compilar. Simplemente no puedo autocompletarme cuando escribo el código.

¿Quizás tiene un proyecto PCL en su solución? (no sé cómo solucionar este problema aún)

0

Esto me sucedió porque Visual Studio establece la "acción Build" a algunos al azar acción al copiar/pegar o mover un archivo XAML de un proyecto a otro dentro de una solución.

Solución: asegúrese de que su "Acción de compilación" esté configurada en la página para usted XAML.

Espero que esto ayude si es el mismo caso para usted.

Cuestiones relacionadas