CoreApplicationView与CoreWindow vs ApplicationView

时间:2015-11-12 20:23:24

标签: c# .net windows-runtime windows-store-apps win-universal-app

CoreApplicationViewCoreWindowApplicationView之间的区别是什么?

我可以看到每个应用程序都有不同的属性等,所以我不是在问“我应该使用哪一个来获取abc属性或方法?”。

询问他们之间的逻辑区别是什么。为什么有不同的课程?因为它们似乎或多或少是相同的东西 - 代表应用程序窗口的类。

1 个答案:

答案 0 :(得分:5)

您提到的课程之间有一些区别。我们可以通过两个维度来区分它们:

  • 结构(请参见从上至下部分)
  • 功能(请参见外部或内部部分)

我专门针对这个问题写了一篇文章,请参见http://walterlv.github.io/post/core-application-window-of-uwp-en.html


有时,我们必须使用名称空间查看完整的类名称,以确定其含义。

  • Windows.ApplicationModel.Core.CoreApplication
  • Windows.ApplicationModel.Core.CoreApplicationView
  • Windows.UI.Xaml.Application
  • 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,也可以分为CoreXaml

CoreApplicationCoreApplicationView管理应用程序模型,而ApplicationCoreWindowWindow管理应用程序内部UI。 CoreApplicationCoreApplicationViewCoreWindow管理核心功能,而ApplicationWindow管理XAML UI。

从上到下

从上到下是从ApplicationWindow,然后是XAML。显然,该应用程序包含窗口,并且该窗口包含内部XAML UI。那么,真正的关系是什么?

CoreApplication管理UWP应用程序的所有视图,而CoreApplicationView是它直接管理的视图。 CoreApplicationView包含一个CoreWindow作为窗口和一个CoreDispatcher作为线程模型。

UWP application view
▲UWP应用程序视图

您可以阅读Show multiple views for an app - UWP app developer - Microsoft Docs来学习如何编写多个视图应用程序。您将进一步了解CoreApplicationCoreApplicationView之间的关系。

CoreWindow是我们都熟悉的窗口。 Windows.UI.XAML.Window封装了CoreWindow,以便于使用。 CoreDispatcher是基于Windows消息循环的线程模型。正是CoreDispatcher使窗口始终显示而不被丢弃。

外部或内部

大多数UWP开发人员都是普通开发人员,因此我们应该站在他们这边考虑外部和内部。普通的UWP开发人员从MainPage开始编写代码,因此外部页面不在页面中,内部页面的XAML内容。

外部包含CoreApplicationCoreApplicationViewCoreWindow,而内部包含ApplicationWindowApplicationWindow是内部的一部分,这很奇怪吗?原因是它们管理应用程序和窗口的XAML部分。

WindowCoreWindow的封装,以提供额外的XAML UI功能。与ApplicationView相同,它是CoreApplication的封装,提供了额外的XAML UI功能。

详细来说,CoreWindow是与Windows操作系统和UWP应用程序模型互操作的类。它提供了这些功能,例如窗口大小,位置,输入状态等。Window是提供为窗口使用XAML UI的功能的类,例如设置窗口的XAML内容,设置窗口的标题栏,或获取窗口的CompositorCoreApplicationView是与Windows操作系统互操作的类,并提供Windows消息循环机制以及更改工作区和非工作区的功能。 ApplicationViewWindow相同,可以为应用程序使用XAML UI。

最后,CoreWindowCoreApplicationView提供了操作系统和应用程序模型的底层核心功能。 WindowApplicationView封装它们以供XAML使用。