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

时间:2015-11-19 02:47:09

标签: c# wpf

是否可以在控制台模式下启动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());
}

它将显示Argument类型'WPF.app'不能分配给参数类型'System.Windows.Window'。

解决它的任何解决方案?

之间有任何不同

1.public partial class App:Application

2.public partial class App:Window

1 个答案:

答案 0 :(得分:5)

您可以声明一个窗口,然后以这种方式启动您的应用程序:

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();
        }
    }
}

这将运行没有Window的WPF应用程序。

另一方面,如果您将一个Window传递给application.Run(),您将获得一个WPF窗口。应用程序不应该从Window派生,因为它应该来自Application。

Application.Run方法不带参数或Window。它不需要应用程序。因此,如果您想要启动以前创建的应用程序,就像在那里一样,您应该执行以下操作:

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

最后,如果您只想使用application.Run()而不必传递特定的窗口,只需使用StartupUri在Application XAML中声明一个启动窗口:

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