2009-06-02 15 views
5

Me gustaría tener mi propia clase de aplicación que hereda de System.Windows.Application. El problema es que en el archivo Application.xaml, tengo que declarar la aplicación como esta:WPF - heredar de System.Windows.Application

<src:MyBaseApplication x:Class="MyApplication" 
    xmlns:src="clr-namespace:MyApplication;assembly=WpfTestApplication" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    StartupUri="FPrincipal.xaml">  
    <Application.Resources> 

    </Application.Resources> 
</src:MyBaseApplication> 

Funciona muy bien en tiempo de ejecución, pero cuando puedo editar las propiedades del proyecto, recibo el siguiente mensaje de error por el proyecto editor de propiedades de Visual Studio:

Ha ocurrido un error al intentar cargar el archivo de definición de la aplicación para este proyecto. El archivo '[...] \ Application.xaml' no se pudo analizar. Edite el archivo en el editor XAML para corregir el error. No se pudo encontrar el elemento raíz esperado "Aplicación" en el archivo de definición de la aplicación.

El proyecto es un proyecto de VB.NET. Alguien tiene una solución? Quiero mantener el archivo application.xaml.

Gracias

+0

¿Alguna vez encontró una solución a este problema? –

+0

Lo probé y no hay ningún error, pude derivar de System.Windows.Application, y luego usarlo en mi App.Xaml, todo funciona como debería, ninguna vista se queja de nada. – adminSoftDK

+0

@adminSoftDK: ¿lo intentó con VS2008? –

Respuesta

-1

Debería decir: < src MyBaseApplication.Resources>?

+0

Bueno, podrías, pero como heredas de Application, también puedes usar Application.Resources ... – Arcturus

-1

Las aplicaciones generalmente apuntan a una ventana e intentan obtener esta información del archivo xaml; pero tiene una referencia en su archivo XAML que Visual Studio no puede determinar ..

xmlns:src="clr-namespace:MyApplication;assembly=WpfTestApplication" 

Así VS no puede analizar el archivo XAML, y por lo tanto le da ese error ...

Mi sugerencia: anula la ventana, o usar las extensiones de aplicación, así:

public static class ApplicationExtensions 
{ 
    public static string GetAwesomeName(this Application) 
    { 
     return "I am an awesome application"; 
    } 
} 

utilizar de esta manera:

Application.Current.GetAwesomeName(); 
+0

Te pierdes algo. El mensaje de error especifica que falta la etiqueta de la aplicación. Es cierto porque la etiqueta raíz es src: MyBaseApplication. VisualStudio debe ser lo suficientemente inteligente como para encontrar la etiqueta raíz con un nombre diferente. Ya sé que puedo subclasificar la aplicación en C#, pero al hacer esto perderemos el archivo .xaml asociado con la aplicación. –

+0

¿Ha considerado dividir esos pedazos de xaml en un ResourceDictionary e incluirlos en los recursos de su aplicación? – Arcturus

2

Lo probé con Visual Studio 2013 pero no experimenté ningún problema. Por lo tanto, debe ser específico de VS 2008. ¿Intentó reorganizar su clase de aplicación en una biblioteca de clases separada? Tal vez es un problema de bloqueo.

ACTUALIZACIÓN

Los pasos que hice en VB.NET VS2013 con el fin de hacer que suceda:

  1. crear la clase de aplicaciones personalizadas. Lo creé en la misma asamblea. Mi nombre asamblea fue: WPFVBTest
Public Class CustomApplication 
    Inherits System.Windows.Application 

End Class 
  1. Modificar la Application.xaml. Agregue la referencia del espacio de nombres y cambie el contenedor raíz a la clase de aplicación personalizada.
<self:CustomApplication x:Class="Application" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:self="clr-namespace:WPFVBTest" 
     StartupUri="MainWindow.xaml"> 
    </self:CustomApplication> 
  1. Modificar el código detrás de archivo: Application.xaml.vb a heredar de la clase CustomApplication
Class Application 
    Inherits CustomApplication 

End Class 
  1. generar la aplicación. Se debe producir un error que indica que MyWpfExtension.vb no está sincronizado con el nombre de la clase de la aplicación. Esta es una clase generada, pero no se regenera en cada compilación. Sé que es una trampa, pero esta era la única forma en que podía hacerlo. Así que he modificado manualmente:
Partial Class Application 
    Inherits CustomApplication 

De esta manera la aplicación construye y funciona sin problemas. Espero que te ayude a resolver tu error.

+0

Todavía tengo un problema en VS 2015. Para mi escenario (configuré el bounty), la clase 'MyBaseApplication' existe en una biblioteca de clases. ¿Qué quieres decir con un problema de bloqueo? –

+0

Lo que puedo pensar es que VS no puede cargar la clase de aplicación personalizada porque está en uso. Quizás VS lo esté usando o alguna otra aplicación. ¿Sucede cuando haces clic derecho en el proyecto e intentas abrir Propiedades? ¿Utiliza alguna otra herramienta en VS que pueda usar el conjunto? Reflector.NET o alguna otra herramienta de terceros? –

+0

Solo para confirmar: ¿lo estás haciendo con VB.NET? –

2

Sé que no va a ser una respuesta popular, pero ... ¿por qué no simplemente actualizar a Visual Studio 2015? ¡Es gratis!

Infierno, anunciaron VS 2017 ayer; también gratis.

+0

Estoy usando VS 2015 y todavía no funciona. ¿Estás usando C# o VB.NET? –