2010-12-16 143 views
3

J'ai une application WPF qui ne compile pas lorsque j'essaie d'ajouter un gestionnaire d'événement à la classe App.L'application WPF utilisant MVVM Toolkit ne sera pas compilée avec StartupEventHandler

Vous trouverez ci-dessous tout le code et l'exception que je reçois. L'application utilise la boîte à outils MVVM - cela peut donc être un facteur.

Si quelqu'un pouvait me dire ce que je pourrais manquer ou mal faire, ce serait grandement apprécié.


Code App.xaml:

<Application x:Class="MyClient.App" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:vm="clr-namespace:Sample.ViewModel" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d" Startup="Application_Startup"> 

<Application.Resources> 
    <!--Global View Model Locator--> 
    <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" /> 
    <!-- Resources scoped at the Application level should be defined here. --> 
    <Style x:Key="TextBlockStyleFooter" TargetType="TextBlock"> 
     <Setter Property="HorizontalAlignment" Value="Center"/> 
     <Setter Property="VerticalAlignment" Value="Center"/> 
     <Setter Property="Foreground" Value="White"/> 
     <Setter Property="Margin" Value="1"/> 
    </Style> 
    <Style x:Key="TextBlockStyleClock" TargetType="TextBlock"> 
     <Setter Property="FontFamily" Value="Arial"/> 
     <Setter Property="Foreground" Value="White"/> 
     <!--<Setter Property="Margin" Value="0, -1,"/>--> 
     <Setter Property="TextAlignment" Value="Center"/> 
    </Style> 
    <Style x:Key="BorderStyle1" TargetType="Border"> 
    </Style> 
</Application.Resources> 

App.xaml.cs code:

using System; 
using System.Windows; 
using System.Windows.Threading; 
using GalaSoft.MvvmLight.Threading; 

namespace Sample 
{ 
    /// <summary> 
    /// Interaction logic for App.xaml 
    /// </summary> 
    public partial class App : Application 
    { 
     static App() 
     { 
      DispatcherHelper.Initialize(); 
     } 

     private void Application_Startup(object sender, StartupEventArgs e) 
     { 

     } 
    } 
} 

Lorsque je tente de compiler, je reçois l'exception suivante:

Error 1 'MyClient.App' does not contain a definition for 'Application_Startup' and no extension method 'Application_Startup' accepting a first argument of type 'EdgePokerClient.App' could be found (are you missing a using directive or an assembly reference?) C:\projects.git\MyClient\src\MyClient\App.xaml 7 73 MyClient 

Répondre

3

Le problème ici est que votre code XAML fait référence à MyClient.App alors que votre fichier code-behind a la classe partielle dans l'espace de noms Sample. Pour le compilateur, ce sont deux classes distinctes. Le gestionnaire d'événements que vous avez défini dans la classe (Sample.App) n'est donc pas présent dans la classe générée MyClient.App.

Vous avez juste besoin de fixer l'espace de noms dans votre code derrière le fichier ou l'attribut x: Name dans le fichier XAML.

Je serais également prudent avec le constructeur statique sur App. Je ne suis pas sûr si le générateur de code ajoutera un constructeur public sans paramètre ou pas, mais si ce n'est pas le cas, avoir seulement un constructeur statique signifiera effectivement que App ne peut pas être instancié.

+0

Faites-vous référence à: xmlns: vm = "clr-namespace: Sample.ViewModel"? Parce que je ne pense pas que ce soit le problème. Cela fait référence à un espace de noms différent afin qu'il puisse être utilisé dans la balise ci-dessous. Ou ai-je manqué votre point? –

+0

Non, ' Josh

+0

Ahh .. gotcha ... c'est ce que c'était. Merci beaucoup, Josh. –

0

Je voudrais poster ce commentaire pour d'autres personnes ayant la même erreur que moi. J'ai eu la même erreur, mais mon espace de noms x: classe n'était pas différent du code derrière l'espace de noms. Certains didacticiels indiquent qu'après avoir placé Startup = "Application_Startup" sur votre XAML, votre code doit être mis à jour automatiquement. cela ne m'a pas conduit à cette erreur.

Mon Fix - le code de mise à jour en arrière avec

private void Application_Startup(object sender, StartupEventArgs e){} 

avant d'ajouter

Startup="Application_Startup" 

au XAML. espérons que cela soit utile à quelqu'un.