原文:WPF中的Application类。

Application对象用的名称空间是system.windows

1、手动创建Application对象步骤。

1.1)、把项目中的App.Xaml文件从项目中排除。

1.2)、新建Startup类。

1.3)、在类中声明静态的、无返回值的Main方法。

1.4)、在方法中创建application对象和窗口对象。

public class Startup
{
[STAThread] //指定应用程序的 COM 线程模式是单线程单元(STA)
static void Main()
{
//方法1:
//创建Application对象。
Application app = new Application();
//实例化窗口。
MainWindow mw = new MainWindow();
//当向Application.Run()方法传递一个窗口时,该窗口被设置为主窗口,可通过Application.MainWindow属性在整个应用程序中访问这个窗口。然后使用Run()方法触发Application.Startup事件显示主窗口。
app.Run(mw); //方法2:
//创建Application对象。
Application app = new Application();
//实例化窗口。
MainWindow mw = new MainWindow();
//设置应用程序主窗口。
app.MainWindow = mw;
//弹出窗口
mw.Show();
//当向Application.Run()方法传递一个窗口时,该窗口被设置为主窗口,可通过Application.MainWindow属性在整个应用程序中访问这个窗口。然后使用Run()方法触发Application.Startup事件显示主窗口。
app.Run(); //方法3
//创建application对象。
Application app = new Application();
//设置uri。
app.StartupUri = new Uri("MainWindow.xaml", UriKind.Relative);
app.Run();
}
}

2、设置应用程序关闭方式。

通常只要窗口尚未关闭,Application类就保持应用程序处于有效状态,如果这不是期望的行为,可调整Application.ShutdownMode属性。如果手动创建Application对象就需要在调用Run()方法之前设置ShutDownMode属性。如果使用的是App.Xaml文件,那么可在xaml文件中单独设置ShutdownMode属性。 当执行Application.Run()方法的时候会导致Application.Run()方法立即返回。

ShutdownMode枚举值

名称

说明

OnLastWindowClose

默认行为,只要至少还有一个窗口存在,应用程序就会保持运行状态。

OnMainWindowClose

传统方式,只要主窗口还处于打开状态,应用程序就会保持运行状态。

OnExceptionShutdown

除非调用Application.Shutdown()方法,否则应用程序就不会结束(即使所有程序都已经关闭)。

3、常用的应用程序事件。

名称

说明

Startup

该事件在调用Application.Run()方法之后,并且在主窗口显示之前执行。

Exit

该事件在应用程序关闭时(不管什么原因),并在Run方法即将返回之前发生,要放在Run()方法之前

SessionEnding

该事件在Windows对话结束时发生

Activated

当激活应用程序中的窗口时发生该事件,当切换到另外一个window程序时也会触发。

Deactivated

当取消激活应用程序中的窗口时发生该事件,当切换到另外一个window程序时也会触发。

DispatcherUnhandledException

应用程序只要发生未处理的异常,都会进入该事件。还可将Handled属性设置为true,继续运行应用程序。

4、显示初始界面。

WPF应用程序的速度快,但并不能在瞬间启动,第一次启动应用程序的时候,会有一些延迟,因为公共语言运行时,首先要初始化 .Net环境,然后启动应用程序,这个时候显示初始界面就有作用了。在Run方法之前执行以下代码。

//屏幕初始化的时候的背景图片。
SplashScreen splashScreen = new SplashScreen("1.png");
//显示初始屏幕。
splashScreen.Show(true);
//淡出初始界面时间(单位是秒)。
splashScreen.Close(TimeSpan.FromSeconds(1));

5、访问当前Application对象。

通过Application.Current.MainWindow属性可在应用程序的任何位置获取当前应用程序实例。从而在多个窗口之间进行基本交互。

假设MainWindow(主窗口)中有一个Test()方法,那么在Window1窗口中可通过以下方式进行访问:

//获取主窗口对象。
MainWindowainWindow mw = (MainWindow)Application.Current.MainWindow;
//调用主窗口Test()方法。
mw.Test();

6、窗口之间进行交互步骤。

6.1)、删除App.xaml文件。

6.2)、新建一个App的类且继承自Application,在里面设置窗口启动项,在写一个Window类型的集合。

6.3)、在主窗口实例化子窗口时,为子窗口设置Ower属性等于主窗口。

6.4)、在子窗口中通过Application.Current.MainWindow属性得到主窗口对象,并调用方法。

6.5)、在主窗口中循环遍历集合中的数据进行设置子窗口。

App类:

public class App : Application
{
[STAThread]
public static void Main()
{
//实例化类。
App app = new App();
app.InitializeComponent();
app.Run();
}
private void InitializeComponent()
{
//设置主窗口启动项。
this.StartupUri = new Uri("MainWindow.xaml", UriKind.Relative);
}
//声明一个Window类型的集合,用于放置子窗口。
private List<Window> listWindow = new List<Window>(); public List<Window> ListWindow
{
get { return listWindow; }
set { this.listWindow = value; }
}
}

 MainWinow后台代码:

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
//窗口加载的时候把Winow1窗口弹出来。
Window1 w1 = new Window1();
//为Window1Owner属性。
w1.Owner = this;
//显示出来。
w1.Show();
//将Winow1加入到集合中。
((App)App.Current).ListWindow.Add(w1);
}
/// <summary>
/// 此方法用于将主窗口标题设置为当前时间。
/// </summary>
public void SetMainWinowTime()
{
this.Title = DateTime.Now.ToString();
}
/// <summary>
/// 此方法用于设置子窗口标题为当前时间。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < ((App)App.Current).ListWindow.Count; i++)
{
//将集合中的向转换为Window1对象,然后调用SetWindowTime()方法。
((Window1)((App)App.Current).ListWindow[i]).SetWindowTime();
}
}
}

 Window窗口后台代码:

public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
/// <summary>
/// 此方法用于设置子窗口标题为当前时间。
/// </summary>
public void SetWindowTime()
{
this.Title = DateTime.Now.ToString();
} /// <summary>
/// 此方法用于获取主窗口,然后调用SetMainWinowTime()方法。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click(object sender, RoutedEventArgs e)
{
((MainWindow)Application.Current.MainWindow).SetMainWinowTime();
}
}

 效果图:

7、单实例应用程序。

实现步骤:

7.1)、删除App.xaml文件。

7.2)、引用Microsoft.VisualBasic程序集。

7.3)、创建SignelInstanceApplication类,让其继承自Application类,在类中重写OnStartup方法(用于实例化窗口),创建Activate()方法(用于激活当前窗口)。

7.4)、创建SignelApplicationManager类,此类继承自WindowsFormsApplicationBase类,此类中包含了3个重要的成员。

7.5)、写一个Startup类,在里面写Main方法,实例化SignelApplicationManager类。

SignelInstanceApplication类:

public class SignelInstanceApplication : System.Windows.Application
{
/// <summary>
/// 重写OnStartup()方法,在方法中实例化主窗口。
/// </summary>
/// <param name="e"></param>
protected override void OnStartup(System.Windows.StartupEventArgs e)
{
base.OnStartup(e);
//在OnStartup()方法中实例化窗口对象(在这里是主窗口)。
MainWindow mw = new MainWindow();
mw.Show();
}

/// <summary>
/// 此方法用于激活当前窗口(让窗口显示最前端)。
/// </summary>
public void Activate()
{
System.Windows.MessageBox.Show("此程序已运行"); //再做其他的处理。
this.MainWindow.Show();
this.MainWindow.Activate();
}
}

SignelApplicationManager类:

class SignelApplicationManager : WindowsFormsApplicationBase
{
//声明application对象。
SignelInstanceApplication app; /// <summary>
/// 在构造函数中设置IsSingleInstance为单例模式。
/// </summary>
public SignelApplicationManager()
{
//IsSingleInstance:确定此应用程序是否为单例应用程序。
this.IsSingleInstance = true;
} /// <summary>
/// 在OnStartup方法中实例化SignelInstanceApplication对象。
/// </summary>
/// <param name="eventArgs"></param>
/// <returns></returns>
protected override bool OnStartup(StartupEventArgs eventArgs)
{
base.OnStartup(eventArgs);
//实例化SignelInstanceApplication对象。
app = new SignelInstanceApplication();
app.Run();
//返回false。
return false;
} /// <summary>
/// 在OnStartupNextInstance调用激活函数。
/// </summary>
/// <param name="eventArgs"></param>
protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
{
base.OnStartupNextInstance(eventArgs);
app.Activate();
}
}

 Startup类:

public class Startup
{
[STAThread()]
public static void Main(string[] args)
{
//实例化SignelApplicationManager对象。
SignelApplicationManager sm = new SignelApplicationManager();
//调用Run()。
sm.Run(args);
}
}

WPF中的Application类。的更多相关文章

  1. Android(java)学习笔记120:Android中的Application类用法

    1.简介 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型:而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就是 ...

  2. Android中的Application类在应用程序中的应用

    Application类 每次应用程序运行时,应用程序的Application类都保持实例化状态(都会持有该Application实例).与Activity不同的是,配置改变并不会导致应用程序重启.在 ...

  3. Android(java)学习笔记61:Android中的 Application类用法

    1. 简介 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型:而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就 ...

  4. WPF中的常用类汇总:

    1.FrameworkElement: WPF中大部分的控件都可以转化成FrameworkElement,利用FrameworkElement属性获取相应的值: 2.WPF获取当前工作区域的宽度和高度 ...

  5. WPF 中关于 DataTemplateSelector 类的应用

    MSDN的解释: 提供一种根据数据对象和与该数据绑定的元素来选择数据模板 DataTemplate 的方法. 示例代码: <Window x:Class="WpfApplication ...

  6. WPF中的MatrixTransform

    原文:WPF中的MatrixTransform WPF中的MatrixTransform                                                         ...

  7. MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件

    原文  MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件 UI 前沿技术 WPF 中的多点触控操作事件 Charles Petzold 下载代码示例 就在过去几年,多点触控还只是科幻电 ...

  8. 正确理解WPF中的TemplatedParent

    (注:Logical Tree中文称为逻辑树,Visual Tree中文称为可视化树或者视觉树,由于名称不是很统一,文中统一用英文名称代表两个概念,况且VisualTreeHelper和Logical ...

  9. 正确理解WPF中的TemplatedParent (转贴)

    http://blog.csdn.net/idebian/article/details/8761388 (注:Logical Tree中文称为逻辑树,Visual Tree中文称为可视化树或者视觉树 ...

随机推荐

  1. 关于pptpd log日志文件的配置

    如何开启pptpd默认日志记录功能. 修改/etc/ppp/options.pptpd中的nologfd,默认没有开,把nologfd注释掉,然后添加 logfile /var/log/pptpd.l ...

  2. Snmp linux

    http://blog.csdn.net/youngqj/article/details/7311849 http://blog.csdn.net/howema/article/details/418 ...

  3. [TypeScript] Catch unsafe use of "this" in TypeScript functions

    this is probably the most tricky thing to use in JavaScript and therefore TypeScript. Fortunately th ...

  4. 如何查看Outlook邮件的源码(包括ip)

    如何查看Outlook邮件的源码(包括ip) 一.总结 1.右键点击邮件可出现 view message details. 二.如何查看Outlook邮件的源码(包括ip) 1.点收件箱 2.鼠标右键 ...

  5. C 语言常见 API(fprintf、fputs、fprintf)

    1. fprintf:输出到文件描述符对应的文件 stderr:错误输出也是一种特殊的文件描述符 #define FatalError(str) fprintf(stderr, "%s\n& ...

  6. 机器学习 Softmax classifier (一个隐含层)

    程序实现 softmax classifier, 含有一个隐含层的情况.activation function 是 ReLU : f(x)=max(0,x) f1=w1x+b1 h1=max(0,f1 ...

  7. Oauth入门学习

    在一些网站总是看到调用其他网站的信息的实例,比如在人人网中导入MSN联系人,在Facebook中导入gmail,yahoo mail好友,第三方网站不需要总知道你的密码,对于应用的授权完全交给你自己, ...

  8. oracle数据库零散知识01

    1,rownum 是一个虚列,使用时必须包括1才能使用,rownum = 1,rownum < 10;  rownum = 2是不可以的: 2,if case loop 要加end结束,end ...

  9. T-SQL部分函数(转)

    函数类别 作用 聚合函数 执行的操作是将多个值合并为一个值.例如 COUNT.SUM.MIN 和 MAX. 配置函数 是一种标量函数,可返回有关配置设置的信息. 转换函数 将值从一种数据类型转换为另一 ...

  10. spark 基于key排序的wordcount

    java /** * 根据单词次数排序的wordcount * @author Tele * */ public class SortWordCount { private static SparkC ...