在控制台应用程序中启动WPF应用程序

5

是否可以在控制台模式下启动WPF应用程序?

public partial class App : Application
{
    public App()
    {
        InitializeComponent();
    }
}

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

[STAThread]
static void Main(string[] args)
{
  if (args.Length > 0)
  {
     switch (args[0].ToLower())
     {
       case "/g": RunApplication(); break;
     }
  }
}

private static void RunApplication()
{
    var application = new System.Windows.Application();

    application.Run(new App());
}

它会显示参数类型“WPF.app”无法分配给参数类型“System.Windows.Window”的错误。

有什么解决方法吗?有什么区别?

1.public partial class App:Application

2.public partial class App:Window


你为什么要那样做呢?你只是想在旁边打开一个控制台吗,还是有特定的策略背后支持这种做法? - B.K.
因为我的应用程序最初是控制台应用程序,所以我尝试在控制台应用程序中添加新参数来启动WPF应用程序。@B.K. - king jia
1个回答

9
您可以声明一个窗口,然后以这种方式启动您的应用程序:
var application = new System.Windows.Application();
application.Run(new Window());

编辑:

您似乎有些困惑,让我来解释一下:

假设您有一个程序:

using System;

namespace ConsoleApplication
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            RunApplication();
        }

        private static void RunApplication()
        {
            var application = new System.Windows.Application();
            application.Run();
        }
    }
}

这将运行一个没有窗口的WPF应用程序。

另一方面,如果你将一个窗口传递给application.Run(),你将得到一个WPF窗口。App不应该从Window派生,因为它应该从Application派生。

Application.Run方法要么不带参数,要么带一个窗口。它不接受Application。因此,如果你想启动一个先前创建的Application,就像你在那里做的那样,你应该这样做:

private static void RunApplication()
{
    var application = new App();
    application.Run();  // add Window if you want a window.
}

最后,如果你只想使用application.Run()而不需要传递一个特定的窗口,只需在你的应用程序XAML中声明一个起始窗口,使用StartupUri即可:
<Application x:Class="WPF.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         StartupUri="SomeWindow.xaml">
</Application>

是的。为此,它可以在public partial class App:Window中运行。但是,在public partial class App:Application中,它将显示参数类型“WPF.app”无法分配给参数类型“System.Windows.Window”。 - king jia
@kingjia 应用程序不应该派生自 Window。你只需要打开一个窗口即可。 - B.K.
@IgorQuirino 不确定你的意思是什么。 - B.K.
好的,这意味着为了在控制台中启动WPF,我们只能使用Window而不是Application?我理解正确吗? - king jia
@kingjia 不,你可以两者都使用。但是,当你使用Application.Run()方法时,它不会将另一个应用程序作为参数。它只接受窗口或什么也不接受。如果你传递空值,它会启动,但是不会显示任何内容。如果你传递一个窗口,它会启动一个窗口。然而,如果你在你的应用程序XAML中声明了一个起始窗口,那么如果你使用Application.Run()并且不传递任何参数,它将打开你之前声明的窗口。有不同的情况。 - B.K.
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接