2009-06-02 16 views
5

Ich möchte meine eigene Anwendungsklasse haben, die von System.Windows.Application erbt. Das Problem ist, dass in der Application.xaml Datei, ich die App so zu erklären habe:WPF - erben von 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> 

Es funktioniert großartig zur Laufzeit, aber wenn ich die Projekteigenschaften bearbeiten, erhalte ich die folgende Fehlermeldung durch das Projekt Eigenschafteneditor von Visual Studio:

Beim Laden der Anwendungsdefinitionsdatei für dieses Projekt ist ein Fehler aufgetreten. Die Datei '[...] \ Application.xaml' konnte nicht analysiert werden. Bitte bearbeiten Sie die Datei im XAML-Editor, um den Fehler zu beheben. Das erwartete Stammelement "Anwendung" konnte in der Anwendungsdefinitionsdatei nicht gefunden werden.

Das Projekt ist ein VB.NET-Projekt. Jemand hat einen Workaround? Ich möchte die Datei application.xaml behalten.

Dank

+0

Haben Sie jemals eine Lösung für dieses Problem gefunden? –

+0

Ich habe es gerade versucht und es gibt keinen Fehler, konnte ich von System.Windows.Application ableiten, und dann in meiner App.Xaml verwenden, funktioniert alles wie es sollte, keine Ansicht beschwert sich über irgendetwas. – adminSoftDK

+0

@adminSoftDK: Haben Sie es mit VS2008 versucht? –

Antwort

-1

es < src sagen sollte: MyBaseApplication.Resources>?

+0

Nun, Sie könnten, aber da Sie von Anwendung erben, können Sie auch Application.Resources verwenden ... – Arcturus

-1

Anwendungen zeigen normalerweise auf ein Fenster und versuchen, diese Informationen aus der XAML-Datei zu erhalten; aber Sie haben eine Referenz in Ihrer XAML-Datei, die Visual Studio kann nicht feststellen, ..

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

So kann VS nicht Ihre XAML-Datei analysieren und damit gibt, dass Fehler ...

Mein Vorschlag: überschreiben Sie die Fenster, oder verwenden sie Erweiterungen auf Anfrage, etwa so:

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

verwenden sie es wie folgt aus:

Application.Current.GetAwesomeName(); 
+0

Sie vermissen etwas. Die Fehlermeldung gibt an, dass das Application-Tag fehlt. Das stimmt, weil das Stamm-Tag src: MyBaseApplication ist. VisualStudio sollte klug genug sein, um das Root-Tag mit einem anderen Namen zu finden. Ich weiß bereits, dass ich die Anwendung in C# unterklassifizieren kann, aber dadurch verlieren wir die .xaml-Datei, die mit der Anwendung verknüpft ist. –

+0

Haben Sie darüber nachgedacht, diese Teile von xaml in ein ResourceDictionary zu schneiden und dieses in die Ressourcen Ihrer Anwendung aufzunehmen? – Arcturus

2

Ich habe es mit Visual Studio 2013 versucht, aber ich habe kein Problem festgestellt. Also sollte es VS 2008 spezifisch sein. Haben Sie versucht, Ihre Anwendungsklasse in eine separate Klassenbibliothek umzuorganisieren? Vielleicht ist es ein Sperrproblem.

UPDATE

Die Schritte, die ich in VB.NET VS2013 tat, um es möglich zu machen:

  1. die Klasse benutzerdefinierte Anwendung erstellen. Ich habe es in derselben Baugruppe erstellt. Mein Montage Name war: WPFVBTest
Public Class CustomApplication 
    Inherits System.Windows.Application 

End Class 
  1. die Application.xaml ändern. Fügen Sie den Namespace-Verweis hinzu, und ändern Sie den Stammcontainer zu der benutzerdefinierten Anwendungsklasse.
<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. den Code hinter Datei ändern: Application.xaml.vb erben von der Klasse Custom
Class Application 
    Inherits CustomApplication 

End Class 
  1. Erstellen Sie die Anwendung. Es sollte ein Fehler auftreten, der darauf hinweist, dass MyWpfExtension.vb nicht mit dem Namen der Anwendungsklasse übereinstimmt. Dies ist eine generierte Klasse, die aber nicht bei jedem Build neu generiert wird. Ich kenne seinen Betrug, aber das war der einzige Weg, wie ich es schaffen konnte. So modifizierte ich es manuell:
Partial Class Application 
    Inherits CustomApplication 

diese Weise wird die Anwendung erstellt und läuft ohne Probleme. Ich hoffe, es hilft dir, deinen Fehler zu lösen.

+0

Ich habe immer noch ein Problem in VS 2015. Für mein Szenario (ich legte die Bounty), existiert die 'MyBaseApplication' Klasse in einer Klassenbibliothek. Was meinst du mit einem Sperrproblem? –

+0

Was ich mir vorstellen kann, dass VS die benutzerdefinierte Anwendungsklasse nicht laden kann, weil sie verwendet wird. Vielleicht nutzt VS es selbst oder eine andere App. Tritt es auf, wenn Sie mit der rechten Maustaste auf das Projekt klicken und versuchen, Eigenschaften zu öffnen? Verwenden Sie ein anderes Tool in VS, das die Assembly verwenden kann? Reflector.NET oder ein anderes Drittanbieter-Tool? –

+0

Nur zur Bestätigung - machst du das mit VB.NET? –

2

Ich weiß, dass es keine beliebte Antwort sein wird, aber ... warum aktualisieren Sie nicht einfach auf Visual Studio 2015? Es ist kostenlos!

Hölle, sie verkündeten VS 2017 gerade gestern; auch kostenlos.

+0

Ich benutze VS 2015 und es funktioniert immer noch nicht. Verwenden Sie C# oder VB.NET? –

Verwandte Themen