首页>Program>source

我正在尝试修改App.cs并从后面的代码中加载wPF XAML文件,但无法正常工作。

无论我尝试将其设置为StartupUri还是无法启动,程序都会在此之后退出。

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        LoginDialog dlg = new LoginDialog();
        if (dlg.ShowDialog() != true)
            return;
        switch (dlg.ChoiceApp) { 
            case ChoiceApp.CustomerEntry:
                StartupUri = new Uri("/MyApp;component/Forms/CustomerEntry.xaml", 
                    UriKind.Relative);
                break;
            case ChoiceApp.VendorEntry:
                StartupUri = new Uri("/MyApp;component/Forms/VendorEntry.xaml", 
                    UriKind.Relative);
                break;
        }
    }
}

现在我什至没有进行跟踪,发现LoginDialog可以正常工作并且可以正确返回值,但是设置" StartupUri"不起作用。

我在反向汇编中检查了OnStartup之后会调用App的DoStartup方法,因此从技术上讲,我的StartupUri必须加载,但是在App.xaml启动uri中根本没有定义。

Note: Bug Confirmed

我注意到ShowDialog设置了Application.Mainwindow,并在对话框结束时将其设置为null,并且由于此设置,在OnStartup或Startup事件中调用Modal Dialog后,StartupUri不起作用。

关于无效的uri或类似的东西,没有错误或例外。

此方法可以在没有在Startup事件或OnStartup中调用DialogBox的情况下起作用,我认为在此方法上调用showdialog会导致诸如将其主窗口设置为过期窗口之类的事情,此后它将关闭。

最新回答
  • 14天前
    1 #

    还在XAML中指定了StartupUri? 如果是这样,请将其删除,看看是否有帮助。MSDN源代码

    如果没有,您可能需要采取不同的方法:将Dialog作为启动程序,然后从该位置基于所选值打开另一个window。

  • 14天前
    2 #

    Akash,我遇到了这个问题 尝试像您一样实现LoginDialog.该对话框没有错误,但是行为是设计使然.

    威兹威兹

    请参阅前面的CoDebug问题:wPF ShowDialog在第二次调用时立即返回null

  • 14天前
    3 #

    只需尝试OnStartup()即可:

    Not a bug. The default ShutdownMode of Application is OnLastWindowClosed, so as soon as the first window is closed your application will start shutting down! Change to OnExplicitShutdown and it will work, but you'll have to manage the shutdown.

  • 14天前
    4 #

    而不是覆盖OnStartup()方法,而是挂接到事件中。

    在XAML中

    StartupUri = new Uri("Forms/CustomerEntry.xaml", UriKind.Relative);
    

    在后面的代码中:

    <Application x:Class="SOTestWPF.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Startup="Application_Startup">
        <Application.Resources>
        </Application.Resources>
    </Application>
    

    这只是我的测试用例,我已经验证它可以正确执行(随机:D)

    private void Application_Startup(object sender, StartupEventArgs e) { var rnd = new Random(); if (rnd.NextDouble() > 0.5) StartupUri = new Uri("/SOTestWPF;component/Window1.xaml", UriKind.Relative); else StartupUri = new Uri("/SOTestWPF;component/Window2.xaml", UriKind.Relative); }

  • javascript:为什么jQueryval(value)不调度DOM元素的任何事件?
  • 使用Java Nio创建子目录和文件