原文: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. swift学习第六天:数组

    数组 数组的介绍 数组(Array)是一串有序的由相同类型元素构成的集合 数组中的集合元素是有序的,可以重复出现 Swift中的数组 swift数组类型是Array,是一个泛型集合 数组的初始化 数组 ...

  2. HDOJ 5001 Walk

    概率DP dp[j][d] 表示不经过i点走d步到j的概率, dp[j][d]=sigma ( dp[k][d-1] * Probability ) ans = sigma ( dp[j][D] ) ...

  3. Opencv Sift算子特征提取与匹配

    SIFT算法的过程实质是在不同尺度空间上查找特征点(关键点),用128维方向向量的方式对特征点进行描述,最后通过对比描述向量实现目标匹配. 概括起来主要有三大步骤: 1.提取关键点: 2.对关键点附加 ...

  4. CRT(C Runtime Library)—— C/C++运行时库

    C runtime library(part of the C standard library) 任何一个 C 程序,它的背后都有一套庞大的代码来进行支撑,使得该程序得以运行在更高级别上,而不必担心 ...

  5. 文本处理之可视化wordcloud

    什么是词云 词云又叫文字云,是对文本数据中出现频率较高的“关键词”在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本数据的主要表达意思. 准备工作: python开发 ...

  6. html5-2 html实体和颜色有哪些

    html5-2 html实体和颜色有哪些 一.总结 一句话总结:网站配色用安全色. 1.颜色用什么类型的颜色(安全色)? 直接百度搜 安全色 即可 2.html实体常用哪6个,头尾符号是什么? 头是取 ...

  7. AJAX代码格式

    var request; //XMLHttpRequest的创建 function createRequest(url){ if(window.XMLHttpRequest){ request = n ...

  8. 【Unity Shaders】Lighting Models —— 灯型号Lit Sphere

    考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同一时候会加上一点个人理解或拓展. 这里是本书全部的插图.这里是本书所需的代码和资源(当然你 ...

  9. NOIP模拟 wall - 最大生成树

    题目大意: 给出n个点,第i个点坐标是(\(x_i, y_i\)),给出m条边,第i条边的权值是\(w_i\),求将图变成一颗树所需要删除边的最小权值和. 题目分析: 首先要看出坐标其实是出题人使出的 ...

  10. spring security之httpSecurity 专题

    37.5.2 Resolving the CsrfToken Spring Security provides CsrfTokenArgumentResolver which can automati ...