Xamarin.Forms: InitializeComponent no existe al crear una nueva página
(30)
Cambiar las propiedades de la página a:
BuildAction => Embedded resource
CustomTools => MSBuild:UpdateDesignTimeXaml
Estoy usando Visual Studio para probar Xamarin.Forms. Estoy tratando de seguir la guía: http://developer.xamarin.com/guides/cross-platform/xamarin-forms/xaml-for-xamarin-forms/getting_started_with_xaml/
En resumen, creo una solución Xamarin.Forms usando una PCL y luego trato de agregar una página
Forms XAML Page
al proyecto PCL.
El código subyacente que se crea se ve así:
public partial class Page1 : ContentPage
{
public Page1()
{
InitializeComponent();
}
}
El problema aquí es que
InitializeComponent();
es rojo.
Cuando intento construir, me informan que
The name ''InitializeComponent'' does not exist in the current context
He estado buscando soluciones y, aunque otros han tenido el mismo problema, sus soluciones no funcionarán para mí. Aquí hay una sugerencia que intenté usar: http://blog.falafel.com/xamarin-error-initializecomponent-does-not-exist-in-the-current-context/
Avíseme si tiene una solución para este problema. ¡Gracias!
Actualizar:
Mi PCL (que es donde también quiero agregar mi página XAML) contiene:
App.cs:
public class App : Application
{
public App()
{
// The root page of your application
MainPage = new ContentPage
{
Content = new StackLayout
{
VerticalOptions = LayoutOptions.Center,
Children = {
new Label {
XAlign = TextAlignment.Center,
Text = "Welcome to Xamarin Forms!"
}
}
}
};
}
protected override void OnStart()
{
// Handle when your app starts
}
protected override void OnSleep()
{
// Handle when your app sleeps
}
protected override void OnResume()
{
// Handle when your app resumes
}
}
Y mi página XAML:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="XamaTest.MyXamlPage">
<Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />
</ContentPage>
Código detrás:
public partial class MyXamlPage : ContentPage
{
public MyXamlPage()
{
InitializeComponent();
}
}
-
Seleccione el archivo
App.xaml
yMainPage.xaml
de la clase en la que está presente el problema. - Haga clic derecho y seleccione propiedades.
- En la acción Build, seleccione "Embedded Resource"
-
En Herramienta personalizada, escriba "
MSBuild:UpdateDesignTimeXaml
" - Limpiar y construir y se fue.
¡Una limpieza y reconstrucción me sirvió!
A veces me sale esto y aquí está la lista de verificación que los resolvió hasta ahora:
-
Asegúrese de que el espacio de nombres en .xaml y .xaml.cs coincida
-
Heredar del padre correcto: ContentPage para una página y ContentView para un control
-
Establezca la acción de compilación del archivo .xaml en
Embedded Resource
si está en el proyecto compartido.
Acabo de actualizar Todos los paquetes , funciona bien.
En las propiedades de la página Xaml solo se establece
Build Action = Embedded resource
Funciona en Visual Studio 2017.
En lo que respecta a mi observación, en Visual Studio 2015, las propiedades XAML ya están configuradas según lo sugerido por las respuestas altamente votadas aquí de forma predeterminada, específicamente:
-
Herramienta personalizada =
MSBuild:UpdateDesignTimeXaml
-
Acción de compilación =
Embedded Resource
pero el error todavía aparece a veces ... (como en esta otra pregunta ).
Editar el archivo XAML correspondiente y luego presionar CTRL + S debería funcionar bien, pero no es necesario. Una forma más limpia de forzar la ejecución de las herramientas personalizadas es haciendo clic derecho en el archivo XAML y luego haciendo clic en el menú contextual "Ejecutar herramienta personalizada".
En mi caso, el problema era la ruta del proyecto. El archivo de código generado recibe un nombre que incluye la ruta absoluta codificada para convertirlo en un nombre de archivo válido. La ruta era "D: / Projekt C # / ProjectRootFolder / Project". El nombre de archivo generado por la herramienta de compilación era "Project.Droid.D_.Projekt_C_. Namespace, etc." Mover el proyecto a una ruta como "D: / project / ProjectRootFolder" ayudó en mi caso.
Este problema aparece cuando los proyectos de solución hacen referencia a la versión 1.4.0.0 de los dlls "Xamarin.Forms.Core", "Xamarin.Forms.Xaml" y "Xamarin.Forms.Platform" versión 1.0.0.0.
Para resolverlo, tuve que bajar a la versión 1.3.3.0 de los dlls, pero con esta versión Xamarin.Forms.Platform 1.0.0.0 no existe.
Estoy usando Visual Studio 2015, tuve el mismo problema y descubrí que ninguna de las respuestas en la red era una solución completa. Aquí explicaré lo que funcionó para mí.
Mi objetivo principal aquí era eliminar el mensaje de error rojo que seguía apareciendo
El nombre
InitializeComponent
no existe en el contexto actual
Básicamente, creé una función llamada
InitializeComponent2()
que hace exactamente lo mismo que
InitializeComponent()
y usé eso, literalmente copié el código de
InitializeComponent()
.
Hace el trabajo.
Se ve así (y lo explicaré):
[System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Forms.Build.Tasks.XamlG", "0.0.0.0")]
private void InitializeComponent2()
{
// Change to:
// this.LoadFromXaml(typeof(Page2)); // for Page2
// this.LoadFromXaml(typeof(Page3)); // for Page3
// and put
// using Xamarin.Forms.Xaml;
// at the top of each source file.
this.LoadFromXaml(typeof(Page1));
}
Ponga la función en la definición de cada una de sus páginas (archivos
.cs
), por ejemplo
public partial class Page1 : ContentPage
{
[System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Forms.Build.Tasks.XamlG", "0.0.0.0")]
private void InitializeComponent2()
{
// Change to:
// this.LoadFromXaml(typeof(Page2)); // for Page2
// this.LoadFromXaml(typeof(Page3)); // for Page3
// and put
// using Xamarin.Forms.Xaml;
// at the top of each source file.
this.LoadFromXaml(typeof(Page1));
}
}
También debes poner
using Xamarin.Forms.Xaml;
en la parte superior de cada página
.cs
donde se
LoadFromXaml(..)
.
Y luego, por supuesto, cambie
InitializeComponent()
a
InitializeComponent2()
para llamar a la nueva función.
es decir, ha puesto la función en el mismo contexto que la página que hace que el error desaparezca.
No puedo imaginar que la función
InitializeComponent
real obtenga algo agregado a medida que modifique su proyecto, pero esa es una posibilidad.
Ha estado bien para mí hasta ahora.
Intenté muchas cosas, cambiando la acción de compilación, el espacio de nombres XAML, reiniciando vs, limpiando + reconstruyendo, buscando actualizaciones del paquete NuGet.
Básicamente, Visual Studio compiló y ejecutó bien el programa en mi dispositivo Android + emulador, pero ese mensaje de error no desapareció. Mi solución es para Android, pero también puede funcionar para iOS, etc.
Regresé a la raíz del problema
InitializeComponent()
El código real para esta función se genera en un archivo llamado
<Your Project Name>.Page1.xaml.g.cs
o
Page2.xaml.g.cs
por ejemplo.
Sin embargo, (el archivo) solo se genera cuando se activa un determinado evento.
Tuve la suerte de descubrirlo escribiendo texto en "Espacio de nombres de herramientas personalizadas", que activó ese evento, para una de las páginas xaml (un archivo que termina en
.xaml
, no
.cs
; asegúrese de tener seleccionado el archivo
.xaml
), escriba algo de texto y presione enter y se creará el archivo.
Luego tuve la gran idea de hacer
InitializeComponent2()
, una función exactamente igual a
InitializeComponent()
y ponerla en cada archivo cs para que exista sin tener que generar el
.xaml.g.cs
cada vez que desee que se
.xaml.g.cs
el error lejos.
Haga clic derecho en * .xaml y haga clic en propiedades, y cambie el valor de "Herramienta personalizada" a "MSBuild: UpdateDesignTimeXaml", luego cambie las propiedades de "Acción de compilación" a " Recurso integrado ", el proyecto de compilación funciona.
He encontrado este problema Está asociado con la codificación de archivos XAML en VS. Estoy usando VS2015.
Resolví este problema de la siguiente manera:
-
Abra el archivo * .xaml en el proyecto y haga clic en el botón Guardar. (Se aplicará la codificación correcta en VS2015).
-
Luego vuelva a abrir el proyecto y reconstruirlo. Ahora no hay errores.
He tenido el mismo problema de vez en cuando, y esto es lo que he estado haciendo para solucionarlo: cuando estoy en el proyecto PCL, agrego una nueva página XAML multiplataforma al proyecto. Agregar una nueva página XAML toma unos segundos para las referencias a "enganchar". Después de que la nueva página XAML se agregue con éxito al proyecto, los subrayados rojos en las páginas XAML (con problemas) se borrarán. Una vez que se resuelve el problema, simplemente elimino el archivo XAML que acabo de agregar. - Entonces, en resumen, agregar una nueva página XAML y luego eliminarla me ha resuelto el problema.
Intenté todo lo anterior y no tuve suerte, lo que funcionó para mí fue forzar la reinstalación de los paquetes Xamarin.Forms. En el indicador de consola del administrador de paquetes;
update-package xamarin.forms -reinstall
No actualiza paquetes, solo elimina y vuelve a agregar
Intente agregar ax: Name = "..." en la página xaml ... Nada más funcionó para mí, pero después de agregar el atributo x: Name en algunos de los elementos de la página, el error desapareció (la mayoría de las veces - I todavía lo entiendo a veces). Uso la última compilación (1.5.0.6447) de Xamarin.Forms ...
XAML no funciona en proyectos compartidos, solo funciona en proyectos portátiles ...
La actualización del paquete Numar de Xamarin.Forms debería hacer el trabajo
La solución final sería editar el archivo del proyecto en un editor de texto y simplemente copiar el patrón de otro archivo no conflictivo. Esta solución funcionó para mí. Por lo general, buscaría esta sintaxis:
<Compile Update="Your/Path/YourContentPage.xaml.cs">
<DependentUpon>YourContentPage.xaml</DependentUpon>
</Compile>
No sé si esto se resuelve, pero para mí, lo único que tuve que hacer es eliminar la primera línea del XAML ("xml version =" 1.0 "encoding =" utf-8 ")
A veces, el control de la versión de origen intenta identificar qué tipo de archivo es y agregar este tipo de cosas.
Parece que la (re) generación de los archivos
blah.xaml.g.cs
es realmente el problema.
Obtengo MUCHO en proyectos compartidos (por eso no los uso a menos que no tenga otra opción).
Sucede mucho más en Xamarin Studio que en Visual Studio, por alguna razón.
Intento no usar XS en absoluto.
A menudo, descargar una de las otras plataformas (por ejemplo, si está construyendo un droide, descargar ios) y limpiar y reconstruir lo solucionará.
También puede intentar hacer algo como abrir uno de los archivos
.xaml
ofensivos y cambiar parte del marcado xaml (por ejemplo, agregar o cambiar una
x:Name
a uno de los controles o vistas).
Esto forzará una regeneración del archivo xaml.g.cs y (al menos para mí) generalmente resuelve el problema.
Esto realmente no debería ser una cosa aunque.
Probablemente este no sea su caso, pero tuve un problema similar y el mío fue xaml y el código detrás del nombre no coincide. por ejemplo, de acuerdo con su muestra, si el código detrás del espacio de nombres es XamaTest (nombre de su aplicación en la mayoría de los casos) y la clase se llama MyXamlPage, su nombre de clase xaml debe ser XamaTest.MyXamlPage ([namespace]. [classname])
Fui tonto después de crear un xaml vacío con código detrás, cambié el nombre de la clase en xaml y recibí este error.
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="XamaTest.MyXamlPage">
<Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />
</ContentPage>
Código detrás:
public partial class MyXamlPage : ContentPage
Si obtiene errores de intellisense como InitializeComponent en sus páginas de Xamarin.Forms pero el proyecto realmente se construye y funciona bien, simplemente agregue una nueva página de Formularios usando el asistente para corregir todos los errores ...
Entonces puedes eliminar esa nueva página.
Solución muy simple que funcionó para mí:
- Copie el contenido del archivo xaml / cs
- Eliminar el archivo xaml / cs
- Crea una nueva clase y pega los contenidos
Ahora la función InitializeComponent () aparece sin subrayado rojo.
Espero que esto ayude a alguien.
Tuve un problema de almacenamiento en caché cuando encontré este error.
Para solucionar esto, simplemente desinstale la última versión del paquete Xamarin.Forms y vuelva a instalar una versión de trabajo anterior.
Cuando la reconstrucción sea exitosa, actualice el paquete nuevamente a la última versión.
Verifique el nombre de la clase correctamente.
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="{AppName}.{ClassName}">
</ContentPage>
El nombre de la clase debe ser una combinación del nombre de la aplicación y el nombre de la clase parcial.
Verifique el texto de la página
x:Class="AppName.Page1"
.
AppName
debe ser el nombre de tu aplicación
agregar
using Xamarin.Forms.Xaml
probado en Visual Studio 2017
ACTUALIZACIÓN: Este error generalmente no aparece en VS 2015, si lo hace, aquí está mi respuesta original:
¡Encontré la solución! Haga clic derecho en el archivo .XAML, seleccione Propiedades .
Verá una propiedad llamada
Herramienta personalizada
.
Cambie su valor de
MSBuild:Compile
a
MSBuild:UpdateDesignTimeXaml
Esto solucionará el problema. No sé sobre el voto negativo, pero aquí está mi captura de pantalla:
Reaparece raramente. Si es así, simplemente abra el Xaml y el código detrás de los archivos y guárdelos. Lo sé, no es la mejor solución, pero hace el trabajo.
Me encontré con este error cuando;
-
ContentPage-cs+xaml
unContentPage-cs+xaml
y laApp-cs+xaml
del proyecto sin eliminarlo realmente. - Vuelva a agregarlos al proyecto en otra carpeta.
Esto fue arreglado por;
-
Seleccione el archivo
.xaml
de la clase en la que está presente el problema. -
Haga clic derecho y seleccione
properties
. -
En la
Build action
seleccione "Embedded Resource" -
En
Custom Tool
escriba "MSBuild: UpdateDesignTimeXaml" - Limpiar y construir y se fue.
-
Tuve un problema similar en el entorno de actualización 4 de
Visual Studio 2013
y probé todas las recomendaciones que encontré en la web. Nada resolvió mi problema. -
Luego probé un enfoque alternativo.
Instalé la vista previa de
Visual Studio 2015
y creé una nueva aplicación en blanco con el proyecto de formularios xamarin . -
Cuando agregué un nuevo archivo
Xaml
, todo estaba bien y el problema con el métodoInitialComponent
desapareció. - No sé exactamente cuál es la razón del problema, pero parece ser un problema relacionado con la configuración.