UWP 应用中 CoreApplication/Application、CoreWindow/Window 之间的区别

栏目: 编程工具 · 发布时间: 7年前

内容简介:在 StackOverflow 上看到有小伙伴询问于是我整理了这篇文章。This post is written in

在 StackOverflow 上看到有小伙伴询问 CoreApplicationCoreApplicationViewApplicationApplicationViewCoreWindowWindow 它们的含义以及它们之间的区别。

于是我整理了这篇文章。

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.ApplicationModelWindows.UI 两类。也就是说, CoreApplicationCoreApplicationView 是管理应用程序模型的,而 ApplicationCoreWindowWindow 是管理应用内 UI 的。小的命名空间分类有 CoreXaml 两类。也就是说, CoreApplicationCoreApplicationViewCoreWindow 是管理核心功能,而 ApplicationWindow 是管理 XAML UI 的。

自顶向下

ApplicationWindow 到 XAML 内容,很明显地就能直到其是自顶向下的关系,应用内包含窗口,窗口内包含 XAML 内容。那么它们之间的关系呢?

CoreApplication 管理一个 UWP 应用中的所有视图(View),而 CoreApplication 直接管理的视图是 CoreApplicationView ;也就是说,UWP 应用 CoreApplication 管理所有的应用视图 CoreApplicationView 。而一个 CoreApplicationView 包含一个窗口和一个线程调度模型,即 CoreWindowCoreDispatcher

UWP 应用中 CoreApplication/Application、CoreWindow/Window 之间的区别 ▲ UWP 应用视图

让 UWP 应用显示多个窗口(多视图) 一文中,由于一个应用对应多个视图,所以可以更容易地理解它们之间的关系。

CoreWindow 就是我们所理解的窗口。为了方便使用, Windows.UI.XAML.Window 类型封装了这个 CoreWindowCoreDispatcher 是基于消息循环的线程调度模型,正是因为有了消息循环,所以此窗口才能一直显示而不被销毁。

对外,还是对内?

我们是站在 UWP 普通开发者的角度来思考这个问题的,普通 UWP 开发者是从 MainPage 开始写 UWP 应用的。所以在这里,“外” 指的是页面之外,或者叫做我们直接编写的 XAML 内容之外,那些非 XAML 内容;而 “内” 指的是页面之内,也就是我们通常写的 XAML 内容。

对外的部分有 CoreApplicationCoreApplicationViewCoreWindow ,对内的部分有 ApplicationWindow 。其中, Window 是对 CoreWindow 的封装,提供了更多与 XAML 相关的功能。这里的 ApplicationView 也是这样,是对 CoreApplication 的封装,提供了 XAML 相关的功能。

具体来说, CoreWindow 是与操作系统、与整个应用打交道的类型,提供了诸如窗口的尺寸、位置、输入状态等设置或调用; Window 是与应用内 UI 打交道的类型,比如可以设置窗口内显示的 UI,设置内部哪个控件属于标题栏,获取此窗口内的 Compositor 。与之对应的, CoreApplicationView 是应用与操作系统交互,与窗口消息循环机制协同工作的类型,包含窗口客户区和非客户区设置; ApplicationView 也是与应用内 UI 打交道的类型,它可以使用 XAML 相关的类型对应用程序视图进行更方便的设置。

总结起来, CoreWindowCoreApplicationView 提供更加核心的操作系统或应用底层功能,而 WindowApplicationView 对前者进行了封装,使得我们能够使用 Windows.UI.Xaml 命名空间下的类型对窗口和应用视图进行控制。

关于这些概念的更多应用

我有另外一些文章用到了这些概念:

参考资料

本文会经常更新,请阅读原文: https://walterlv.github.io/post/core-application-window-of-uwp.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

UWP 应用中 CoreApplication/Application、CoreWindow/Window 之间的区别 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Probability and Computing

Probability and Computing

Michael Mitzenmacher、Eli Upfal / Cambridge University Press / 2005-01-31 / USD 66.00

Assuming only an elementary background in discrete mathematics, this textbook is an excellent introduction to the probabilistic techniques and paradigms used in the development of probabilistic algori......一起来看看 《Probability and Computing》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具