如何基于Arguments启动WPF

Tad*_*ada 48 c# wpf

我正在开发一个执行某些文件操作的应用程序,我希望能够通过控制台或UI(我选择WPF)进行操作.

我非常想说:(假的)

if ( Environment.GetCommandLineArgs().Length > 0 )
{
    //Do not Open WPF UI, Instead do manipulate based
    //on the arguments passed in
}
else
{
    //Open the WPF UI
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了几种以编程方式启动WPF窗口/应用程序的不同方法:

Application app = new Application ();
app.Run(new Window1());
Run Code Online (Sandbox Code Playgroud)

但我不完全确定我想将其插入控制台应用程序.

有没有人有关于如何实现这一目标的最佳实践或建议?主要处理功能在我创建的Helper类中.所以基本上我要么想要一个静态启动方法(比如标准的Console Application创建),要么根据传入的参数来访问Helper类.

yo *_*han 109

在Application类中,有一个事件"StartUp"可以使用它.它为您提供通过命令提示符提供的args.以下是MSDN的一个示例:

App.xaml中

<Application x:Class="WpfApplication99.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         Startup="App_Startup">
</Application>
Run Code Online (Sandbox Code Playgroud)

App.xaml.cs

public partial class App : Application
{
    void App_Startup(object sender, StartupEventArgs e)
    {
        // Application is running
        // Process command line args
        bool startMinimized = false;
        for (int i = 0; i != e.Args.Length; ++i)
        {
            if (e.Args[i] == "/StartMinimized")
            {
                startMinimized = true;
            }
        }

        // Create main application window, starting minimized if specified
        MainWindow mainWindow = new MainWindow();
        if (startMinimized)
        {
            mainWindow.WindowState = WindowState.Minimized;
        }
        mainWindow.Show();
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望这将有所帮助.

  • 除了上面的建议,我相信值得注意的是,如果存在,则需要删除App.xaml中的StartupUri属性.如果不这样做,您将生成窗口的两个实例. (7认同)
  • 这是正确的方法.请参阅http://msdn.microsoft.com/en-us/library/system.windows.application.startup.aspx (3认同)

Hab*_*eeb 26

获取命令行参数有两个选项
1)如果要读取参数OnStartup.这有利于全球访问args.

覆盖OnStartupApp.xaml.cs并查看Args该物业StartupEventArgs类.

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        foreach (string arg in e.Args)
        {
            // TODO: whatever
        }
        base.OnStartup(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

2)另一种简单的方法是从Environment Object中读取参数.

Environment.GetCommandLineArgs();

这可以在应用程序的任何位置使用,例如从Form/Page.