使用MVVM Toolkit的WPF应用程序无法使用StartupEventHandler进行编译

时间:2010-12-16 01:47:02

标签: wpf events mvvm

当我尝试向App类添加任何事件处理程序时,我有一个不编译的WPF应用程序。

以下是我收到的所有代码和例外情况。该应用程序使用MVVM工具包 - 这可能是一个因素。

如果有人能告诉我我可能遗失或做错了什么,我们将不胜感激。


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代码:

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)
        {

        }
    }
}

当我尝试编译它时,我得到以下异常:

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

2 个答案:

答案 0 :(得分:3)

这里的问题是您的XAML引用MyClient.App,而您的代码隐藏文件在Sample命名空间中具有部分类。对于编译器,这些是两个单独的类。因此,您在一个类(Sample.App)中定义的事件处理程序不存在于生成的类MyClient.App中。

您只需修复代码隐藏文件中的命名空间或XAML文件中的x:Name属性。

我还要小心App上的静态构造函数。我不确定代码生成器是否会添加公共无参数构造函数,但如果没有,只有静态构造函数将有效地表示App无法实例化。

答案 1 :(得分:0)

我想发布此评论给其他人像我一样得到同样的错误。 我有同样的错误,但是我的x:class命名空间与命名空间后面的代码没有什么不同。一些教程说,在你的XAML上放置Startup =“Application_Startup”后,你的代码应该自动更新。没有发生这种错误导致我。

我的修复 - 用

更新代码
private void Application_Startup(object sender, StartupEventArgs e){}

之后添加

Startup="Application_Startup"

到xaml。 希望这对某人有用。