内容简介:在 StackOverflow 上看到有小伙伴询问于是我整理了这篇文章。This post is written in
在 StackOverflow 上看到有小伙伴询问 CoreApplication
、 CoreApplicationView
、 Application
、 ApplicationView
、 CoreWindow
、 Window
它们的含义以及它们之间的区别。
于是我整理了这篇文章。
This post is written in multiple languages . Please select yours:
StackOverflow 上的地址: c# - CoreApplicationView vs CoreWindow vs ApplicationView - Stack Overflow 。
命名空间
类的完整含义经常需要配合其命名空间查看,所以我们有必要将这几个类的完整名称拿出来看:
Windows.ApplicationModel.Core.CoreApplication Windows.ApplicationModel.Core.CoreApplicationView Windows.UI.Xaml.Application Windows.UI.ViewManagement.ApplicationView Windows.UI.Core.CoreWindow Windows.UI.Xaml.Window
额外的,如果你关心标题栏,还有:
Windows.ApplicationModel.Core.CoreApplicationViewTitleBar Windows.UI.ViewManagement.ApplicationViewTitleBar
再额外的,如果你关心线程模型,还有:
Windows.UI.Core.CoreDispatcher Windows.UI.Xaml.DispatcherTimer
可以看到,大的命名空间分类有 Windows.ApplicationModel
和 Windows.UI
两类。也就是说, CoreApplication
和 CoreApplicationView
是管理应用程序模型的,而 Application
、 CoreWindow
和 Window
是管理应用内 UI 的。小的命名空间分类有 Core
和 Xaml
两类。也就是说, CoreApplication
、 CoreApplicationView
和 CoreWindow
是管理核心功能,而 Application
和 Window
是管理 XAML UI 的。
自顶向下
Application
到 Window
到 XAML 内容,很明显地就能直到其是自顶向下的关系,应用内包含窗口,窗口内包含 XAML 内容。那么它们之间的关系呢?
CoreApplication
管理一个 UWP 应用中的所有视图(View),而 CoreApplication
直接管理的视图是 CoreApplicationView
;也就是说,UWP 应用 CoreApplication
管理所有的应用视图 CoreApplicationView
。而一个 CoreApplicationView
包含一个窗口和一个线程调度模型,即 CoreWindow
和 CoreDispatcher
。
▲ UWP 应用视图
在 让 UWP 应用显示多个窗口(多视图) 一文中,由于一个应用对应多个视图,所以可以更容易地理解它们之间的关系。
CoreWindow
就是我们所理解的窗口。为了方便使用, Windows.UI.XAML.Window
类型封装了这个 CoreWindow
。 CoreDispatcher
是基于消息循环的线程调度模型,正是因为有了消息循环,所以此窗口才能一直显示而不被销毁。
对外,还是对内?
我们是站在 UWP 普通开发者的角度来思考这个问题的,普通 UWP 开发者是从 MainPage
开始写 UWP 应用的。所以在这里,“外” 指的是页面之外,或者叫做我们直接编写的 XAML 内容之外,那些非 XAML 内容;而 “内” 指的是页面之内,也就是我们通常写的 XAML 内容。
对外的部分有 CoreApplication
、 CoreApplicationView
和 CoreWindow
,对内的部分有 Application
和 Window
。其中, Window
是对 CoreWindow
的封装,提供了更多与 XAML 相关的功能。这里的 ApplicationView
也是这样,是对 CoreApplication
的封装,提供了 XAML 相关的功能。
具体来说, CoreWindow
是与操作系统、与整个应用打交道的类型,提供了诸如窗口的尺寸、位置、输入状态等设置或调用; Window
是与应用内 UI 打交道的类型,比如可以设置窗口内显示的 UI,设置内部哪个控件属于标题栏,获取此窗口内的 Compositor
。与之对应的, CoreApplicationView
是应用与操作系统交互,与窗口消息循环机制协同工作的类型,包含窗口客户区和非客户区设置; ApplicationView
也是与应用内 UI 打交道的类型,它可以使用 XAML 相关的类型对应用程序视图进行更方便的设置。
总结起来, CoreWindow
和 CoreApplicationView
提供更加核心的操作系统或应用底层功能,而 Window
和 ApplicationView
对前者进行了封装,使得我们能够使用 Windows.UI.Xaml
命名空间下的类型对窗口和应用视图进行控制。
关于这些概念的更多应用
我有另外一些文章用到了这些概念:
参考资料
本文会经常更新,请阅读原文: https://walterlv.github.io/post/core-application-window-of-uwp.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Android应用之间数据的交互(一)获取系统应用的数据
- Android里应用程序,应用程序窗口和视图对象之间的关系
- iOS 应用之间的跳转(OC&Swift)
- 上手spring cloud(二)微应用之间的服务调用
- 【Redis】不同数据结构之间的差异及应用场景
- Angular 允许开发者在 Web 和移动应用之间共享代码
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。