App OnStartup永远不会被调用

Jon*_*att 8 wpf startup

很简单的问题,但我没有进展所以我想我应该问...

我正在编写一个小型的WPF原型,我在其中放置了我认为它属于的启动逻辑:In(重写的)App.OnStartup方法.

问题是方法永远不会被调用,我不明白为什么!

我浏览了一些,发现有人说<Application>App.xaml中的标记必须App在" x:Class"属性中指定实现类().我改变了它x:Class="Application",x:Class="App"但它没有任何区别.

我在这里错过了什么?

编辑:这是代码......

XAML:

<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="App"
    ShutdownMode="OnMainWindowClose"
    StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Recources\Brushes\Brushes.xaml"/>
                <ResourceDictionary Source="Recources\Templates\Templates.xaml"/>
                <ResourceDictionary Source="Recources\Styles\GVSStyles.xaml"/>
                <ResourceDictionary Source="Recources\Styles\TimePicker.xaml"/>
                <ResourceDictionary Source="Recources\Icons\GVSIcons.xaml"/>
                <ResourceDictionary Source="Recources\Icons\BottleIcon.xaml"/>
                <ResourceDictionary Source="Recources\Styles\BusyAnimationStyle.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>
Run Code Online (Sandbox Code Playgroud)

代码背后......

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    // lower default framerate from 60 to 20 to save CPU ...
    Timeline.DesiredFrameRateProperty.OverrideMetadata(
        typeof(Timeline),
        new FrameworkPropertyMetadata { DefaultValue = 20 });

    hookUpViews();
    connectToServer();
}
Run Code Online (Sandbox Code Playgroud)

H.B*_*.B. 20

编辑:您的XAML似乎与后面的代码无关,x:Class需要包含App类的命名空间.例如MyWpfApplication.App.


除非您发布一些代码,否则您只是疯狂猜测,这是我的:您没有正确覆盖该方法,但使用相同名称和签名的方法隐藏它.

这是一个工作覆盖应该是这样的:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
    MessageBox.Show("!");
}
Run Code Online (Sandbox Code Playgroud)

正如所建议的那样,您可以使用该Startup事件,但不必如此StartupUri,除了覆盖中的代码之外,还将执行该事件.