应用程序以 Main 方法为入口点,如果为 Main 方法指定一个 string[] 类型的参数,在程序运行时,这个参数会获取到传递给应用程序的命令行参数。

而 WPF 应用程序比较特殊,因为在VS中包含一些生成的的代码,因此,Main 方法所在的代码文件被隐藏了(文件名为App.g.cs,g 表示生成的意思),虽然在项目的obj目录下能找到这个文件,但是直接在生成的文件中编写代码是没有意义的,下次生成时就会覆盖掉。

因此,在WPF应用程序中,应该将App类视为入口点,可以在App类中处理一些程序初始化的事情。

其实,在.net 框架中,Environment 类有个静态的 GetCommandLineArgs 方法,它的好处是可以在程序的任意代码处获取传递给程序的命令行参数。所以,在WPF应用程序中,你依然可以调用 GetCommandLineArgs 方法来获取命令行参数,不过,有一点得注意,GetCommandLineArgs 方法所返回的字符串数组中,第一个元素是当前程序的全路径,从第二个元素起才是命令行参数。

比如,你可以这样:

    string[] pargs = Environment.GetCommandLineArgs();

除了上述万能方法外,特定于 WPF ,框架也提供了专门的方案。

Application 类用于管理 WPF 应用程序相关的各种数据,它有一个 Startup 事件,当应用程序启动时,这个事件会发生,我们可以在这个事件中做一些初始化工作,比如分析命令行参数,实例化要显示的窗口等。其中,事件参数 e (类型StartupEventArgs),有一个 Args 属性,是一个字符串数组,里面所包含的就是命令行参数。

在 Startup 事件处理结束之前,是不会加载UI的,所以在这个事件的处理代码中,你不应该去访问UI,而是初始化UI。

比如我开发了一个应用,叫【一念成佛,一念成魔】,它有两个窗口,第一个窗口叫【天堂】,第二个窗口叫【地狱】。应用程序启动后,是进入天堂还是坠入地狱,取决于传递给程序的命令行参数,如果带参数 -a,就进入天堂模式;如果是-b,就进入地狱模式。

首先,为 Startup 事件声明一个事件处理方法。

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

然后,处理代码,分析命令行参数,显示对应的窗口。

        private void OnAppStartup(object sender, StartupEventArgs e)
{
if(e.Args.Length == )
{
// 退出
Shutdown();
} // 创建并显示窗口
Window mWind;
if (e.Args.Contains("-a"))
{
mWind = new Window1();
}
else
{
mWind = new Window2();
}
mWind.Show();
}

如果没有命令行参数,就直接退出程序,Shutdown 方法是关闭当前程序,不是关机,不用害怕。

在调试阶段测试命令行参数,可以打开项目属性窗口,定位到【调试】选项卡,在右边页面上会看到,可以输入命令行参数,比如,我输入 -b。

接着,调试运行,就会看到如下窗口打开。

设置程序要显示的窗口,还有一种方法——直接设置 StartupUri 属性,它需要一个指向XAML文件的 URI,项目内部可以用相对路径。

            if (e.Args.Contains("-a"))
{
StartupUri = new Uri("Window1.xaml", UriKind.Relative);
}
else
{
StartupUri = new Uri("Window2.xaml", UriKind.Relative);
}

这样也很简洁。

好,这是老周为大伙伴准备的儿童节礼物。

 

最新文章

  1. iOS 让按钮上的标题换行显示
  2. {Reshipt}{文白}{资治通鉴}
  3. DWG2SHP DXF2SHP 如何把AutoCAD的DWG,DXF文件转换为Esri ArcGIS的Shape文件
  4. Jquery.Datatables 基本设置的中文注解
  5. Power of Four
  6. Nginx+Center OS 7.2 开机启动设置(转载)
  7. Jquery 常用总结
  8. Demo1_iOS9网络适配_改用更安全的HTTPS
  9. EF查询数据库框架的搭建
  10. 如何实现win7和VirtualBox中Ubuntu系统共享文件夹
  11. SQL Server的学习
  12. 【Tomcat】shell获得war包
  13. Python设计模式 - UML - 对象图(Object Diagram)
  14. JS 文本框格式化
  15. Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
  16. Oralce 日期操作
  17. STL基础2:vector中使用结构体
  18. 【jquery】图片前后对比效果——beforeAfter
  19. Kafka配置SSL(云环境)
  20. APP案例分析——嘀嗒番茄钟

热门文章

  1. ElasticSearch集群安装配置
  2. 原生态JS实现banner图的常用所有功能
  3. saltstack部署
  4. 利用 Forcing InnoDB Recovery 特性解决 MySQL 重启失败的问题
  5. lua 数据类型
  6. html渲染过程
  7. 排序算法合集 python
  8. Python中的支持向量机SVM的使用(有实例)
  9. bzoj1013 [JSOI2008]球形空间产生器
  10. 系统启动 之 Linux系统启动概述(2)