【WPF系列】- Application详解
文章目录
- [【WPF系列】- Application详解](#【WPF系列】- Application详解)
-
- 一、Application简介
-
- [Application 类具体有以下功能:](#Application 类具体有以下功能:)
- 二、初始App.xaml
- 二、自定义Main方法启动WPF应用程序
- 三、Application属性
- 四、Application方法
- 五、Application事件
- 六、Application总结
一、Application简介
WPF和WinForm很相似,WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只有一个 Application 实例存在。和 WinForm 不同的是WPF Application默认由两部分组成 : App.xaml 和 App.xaml.cs,这有点类似于 Asp.Net WebForm,将定义和行为代码相分离。
Application 类具体有以下功能:
- 跟踪应用程序的生存期并与之交互。
- 检索和处理命令行参数。
- 检测和响应未经处理的异常。
- 共享应用程序范围的属性和资源。
- 管理独立应用程序中的窗口。
- 跟踪和管理导航。
二、初始App.xaml
使用Visual Studio创建一个WPF应用程序,使用App.xaml文件启动应用程序。XAML并不是严格的XML格式的文件,它是一种DSL语言,它所有的定义都会由编译器最后编译成代码。
App.xaml文件
xaml
<Application x:Class="_010_WPF_Demo.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:_010_WPF_Demo"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
App.xaml.cs文件
c#
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace _010_WPF_Demo
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
}
}
App类继承Application。Application实现单一实例模式,以提供对窗口,属性和资源范围服务的共享访问。因此,每个AppDomain只能创建一个Application实例。
也可以使用标记、标记和代码隐藏或代码实现Application。如使用Application标记实现,则必须将标记文件配置为MICROSOFT生成引擎(MSBuild)ApplicationDefinition项。
独立应用程序不需要 Application 对象;可以在不创建 实例Application的情况下 (
Main
) 实现自定义static
入口点方法以打开窗口。
二、自定义Main方法启动WPF应用程序
首先在项目中排除App.xaml文件。操作步骤:鼠标右键,弹出"弹出菜单 -> 从项目中排除,然后创建启动文件App.cs,并在App.cs类中添加Main方法
第一种:启动应用程序的代码
C#
[STAThread]
private static void Main()
{
Application app = new Application();
MainWindow main=new MainWindow();
app.Run(main);
}
第二种:启动应用程序的代码
C#
[STAThread]
private static void Main()
{
Application app = new Application();
MainWindow main=new MainWindow();
app.MainWindow= main;
main.ShowDialog();
app.Run();
}
第三种:启动应用程序的代码
c#
[STAThread]
private static void Main()
{
Application app = new Application();
app.StartupUri = new Uri("MainWindow.xaml", UriKind.Relative);
app.Run();
}
以上三种方法都可以使用代码启动一个WPF应用程序。
三、Application属性
序号 | 属性名 | 说明 |
---|---|---|
1 | Current | 获取当前Application的AppDomain对象 |
2 | Dispatcher | 获取与此Dispatcher关联的DispatcherObject。 |
3 | MainWindow | 获取或设置应用程序的主窗口 |
4 | Properties | 获取应用程序范围属性的集合 |
5 | ResourceAssembly | 获取或设置 , Assembly 它为 WPF 应用程序中的资源提供包统一资源标识符 (URI) 。 |
6 | Resource | 获取或设置应用程序范围资源(如样式和画笔)的集合。 |
7 | ShutdownMode | 获取或设置导致调用 Shutdown() 方法的条件 |
8 | StartupUri | 获取或设置在应用程序启动时自动显示的 UI。 |
9 | Windows | 获取应用程序中的实例化窗口。 |
四、Application方法
序号 | 方法名 | 说明 |
---|---|---|
1 | CheckAccess() | 确定调用线程是否可以访问此DispatcherObject。(继承自DispatcherObject) |
2 | Equals(Object) | 确定指定对象是否等于当前对象。 |
3 | FindResource(Object) | 使用指定的键搜索用户界面(UI)资源(如Style或Brush),如果找不到请求的资源,则引发异常 |
4 | GetContentStream(Uri) | 返回位于指定Uri的内容数据文件的资源流。 |
4 | GetCookie(Uri) | 为由Uri指定的位置检索Cookie。 |
5 | GetHashCode() | 作为默认哈希函数 |
6 | GetRemoteStream(Uri) | 返回位于指定Uri的源站点数据文件的资源流 |
7 | GetResourceStream(Uri) | 返回位于指定Uri的资源数据文件的资源流 |
8 | GetType() | 获取当前实例的Type |
9 | LoadComponent(Object,Uri) | 加载位于指定统一资源标识符的XAML文件(URI), 并将其转换为由XAML文件的根元素指定的对象的实例。 |
10 | LoadComponent(Uri) | 加载位于指定统一资源标识符的XAML文件(URI),并将其转换为由XAML文件的根元素指定的对象的实例。 |
11 | MemberwiseClone() | 创建当前Object的浅表副本 |
12 | OnActivated(EventArgs) | 引发Activated事件 |
13 | OnDeactivated(EventArgs) | 引发Deactivated事件 |
14 | OnExit(ExitEventArgs) | 引发Exit事件 |
15 | OnFragmentNavigation (FragmentNavigationEventArgs) | 引发FragmentNavigation事件 |
16 | OnLoadCompleted (NavigationEventArgs) | 引发 LoadCompleted 事件。 |
17 | OnNavigated (NavigationEventArgs) | 引发 Navigated 事件。 |
18 | OnNavigationFailed (NavigationFailedEventArgs) | 引发 NavigationFailed事件 |
19 | OnNavigationProgress (NavigationProgressEventArgs) | 引发 NavigationProgress 事件。 |
20 | OnNavigationStopped (NavigationEventArgs) | 引发 NavigationStopped 事件。 |
21 | OnSessionEnding (SessionEndingCancelEventArgs) | 引发 SessionEnding事件 |
22 | OnStartup(StartupEventArgs) | 引发 Startup 事件。 |
23 | Run() | 启动 Windows Presentation Foundation 应用程序。 |
24 | Run(Window) | 启动 Windows Presentation Foundation 应用程序并打开指定窗口。 |
25 | SetCookie(Uri,String) | 为由 Uri指定的位置创建一个 Cookie。 |
26 | Shutdown() | 关闭一个应用程序 |
27 | Shutdown(Int32) | 关闭将指定退出代码返回给操作系统的应用程序。 |
28 | ToString() | 返回表示当前对象的字符串 |
29 | TryFindResource(Object) | 搜索指定资源。 |
30 | VerifyAccess() | 强制调用线程具有此DispatcherObject的访问权限。 |
五、Application事件
序号 | 事件名 | 说明 |
---|---|---|
1 | Activated | 当应用程序成为前台应用程序时发生。 |
2 | Deactivated | 当应用程序停止作为前台应用程序时发生。 |
3 | DispatcherUnHandledException | 在异常由应用程序引发但未进行处理时发生。 |
4 | Exit | 在应用程序关闭且无法取消之前发生 |
5 | FragmentNavigation | 当应用程序中的导航器开始导航到内容片段时发生;如果所需片段位于当前内容中,则导航将立即发生;如果所需片段位于不同内容中,则加载源 XAML 内容后,将立即发生导航。 |
6 | LoadCompleted | 在已经加载、分析并开始呈现应用程序中的导航器导航到的内容时发生 |
7 | Navigated | 在已经找到应用程序中的导航器要导航到的内容时发生,尽管此时该内容可能尚未完成加载。 |
8 | Navigating | 在应用程序中的导航器请求新导航时发生。 |
9 | NavigationFailed | 在应用程序中的导航器在导航到所请求内容时出现错误的情况下发生。 |
10 | NavigationProgress | 在由应用程序中的导航器管理的下载过程中定期发生,以提供导航进度信息。 |
11 | NavigationStopped | 在调用应用程序中的导航器的 StopLoading方法时发生,或者当导航器在当前导航正在进行期间请求了一个新导航时发生。 |
12 | SessionEnding | 当用户通过注销或关闭操作系统来结束 Windows 会话时发生。 |
13 | StartUp | 在调用Run()对象的Application方法时发生 |
六、Application总结
Application是封装WPF应用程序特定功能的类,实现单一实例模式,以提高对其窗口,属性和资源范围服务的共享访问,因此,每个WPF的AppDomain只是创建类的Application一个实例。Application可以通过使用标记、标记和代码隐藏或代码实现Application。