CoreApplicationView与CoreWindow与ApplicationView的区别

7

CoreApplicationViewCoreWindowApplicationView之间有什么区别呢?

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

我在问它们之间的逻辑区别是什么。为什么需要不同的类?因为它们似乎更多或更少代表了同一件事情 - 表示应用程序窗口的类。


6
Core 对象通常是为了应用程序框架所使用的(如 XAML、WinJS)。然后这些框架会以更符合编程语言的方式暴露 Core 对象,例如,CoreWindow.SizeChanged 在 XAML 中变成了 Window.SizeChanged 事件,在 JavaScript 中变成了 window.onresize 事件。CoreWindow.KeyDown 事件在 XAML 中变成了 UIElement.KeyDown 事件,在 JavaScript 中则变成了 HTMLElement.onkeydown 事件。一般而言,请使用框架对象而非 Core 对象。 - Raymond Chen
@RaymondChen 谢谢。 - ispiro
@RaymondChen 可能值得把你的评论放在答案里 :) - Felix
1个回答

10

你提到的类之间有几个不同之处。我们可以通过两个方面来区分它们:

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

我专门为这个问题写了一篇文章,可以查看 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,或者将它们分为CoreXamlCoreApplicationCoreApplicationView管理应用程序模型,而ApplicationCoreWindowWindow则管理应用程序内部UI。 CoreApplicationCoreApplicationViewCoreWindow管理核心功能,但ApplicationWindow则管理XAML UI。
从上到下是从ApplicationWindow,然后到XAML。很明显,应用程序包含窗口,窗口包含内部XAML UI。那么,真正的关系是什么? CoreApplication管理UWP应用程序的所有视图,CoreApplicationView是它直接管理的视图。一个CoreApplicationView包含一个CoreWindow作为窗口,以及一个CoreDispatcher作为线程模型。

UWP应用程序视图
▲ UWP应用程序视图

您可以阅读为应用程序显示多个视图 - UWP应用程序开发人员 - 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 操作系统进行交互并提供窗口消息循环机制和更改客户端区域和非客户端区域的能力的类。ApplicationViewWindow 相同,提供了使用 XAML UI 的应用程序的能力。
总之,CoreWindowCoreApplicationView 提供操作系统和应用程序模型的低级核心功能。WindowApplicationView 封装了它们以供 XAML 使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接