CoreApplicationView、CoreWindow和ApplicationView之间有什么区别呢?
我可以看到每个类都有不同的应用程序属性等,所以我不是在问“我应该使用哪一个来获取abc
属性或方法?”。
我在问它们之间的逻辑区别是什么。为什么需要不同的类?因为它们似乎更多或更少代表了同一件事情 - 表示应用程序窗口的类。
CoreApplicationView、CoreWindow和ApplicationView之间有什么区别呢?
我可以看到每个类都有不同的应用程序属性等,所以我不是在问“我应该使用哪一个来获取abc
属性或方法?”。
我在问它们之间的逻辑区别是什么。为什么需要不同的类?因为它们似乎更多或更少代表了同一件事情 - 表示应用程序窗口的类。
你提到的类之间有几个不同之处。我们可以通过两个方面来区分它们:
我专门为这个问题写了一篇文章,可以查看 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.ApplicationModel
和Windows.UI
,或者将它们分为Core
和Xaml
。
CoreApplication
和CoreApplicationView
管理应用程序模型,而Application
、CoreWindow
和Window
则管理应用程序内部UI。 CoreApplication
、CoreApplicationView
和CoreWindow
管理核心功能,但Application
和Window
则管理XAML UI。Application
到Window
,然后到XAML。很明显,应用程序包含窗口,窗口包含内部XAML UI。那么,真正的关系是什么?
CoreApplication
管理UWP应用程序的所有视图,CoreApplicationView
是它直接管理的视图。一个CoreApplicationView
包含一个CoreWindow
作为窗口,以及一个CoreDispatcher
作为线程模型。
您可以阅读为应用程序显示多个视图 - UWP应用程序开发人员 - Microsoft Docs,了解如何编写多个视图应用程序。您将更加了解CoreApplication
和CoreApplicationView
之间的关系。
CoreWindow
是我们都熟悉的窗口。
Windows.UI.XAML.Window
封装了CoreWindow
以便更轻松地使用。CoreDispatcher
是基于Windows消息循环的线程模型。正是CoreDispatcher
使得窗口一直保持显示状态而不被释放。
MainPage
开始编写代码,所以外部是页面之外的部分,而内部则是页面的XAML内容。CoreApplication
、CoreApplicationView
和CoreWindow
,而内部部分包含Application
和Window
。 Application
和Window
作为内部部分是否很奇怪呢?原因是它们管理应用程序和窗口的XAML部分。
Window
是CoreWindow
的封装,提供额外的XAML UI功能。同样,ApplicationView
也是CoreApplication
的封装,提供额外的XAML UI功能。CoreWindow
是与 Windows 操作系统和 UWP 应用程序模型进行交互的类。它提供了窗口大小、位置、输入状态等功能。Window
是提供使用 XAML UI 的窗口类,如设置窗口的 XAML 内容、设置窗口的标题栏或获取窗口的 Compositor
。 CoreApplicationView
是与 Windows 操作系统进行交互并提供窗口消息循环机制和更改客户端区域和非客户端区域的能力的类。ApplicationView
与 Window
相同,提供了使用 XAML UI 的应用程序的能力。CoreWindow
和 CoreApplicationView
提供操作系统和应用程序模型的低级核心功能。Window
和 ApplicationView
封装了它们以供 XAML 使用。
Core
对象通常是为了应用程序框架所使用的(如 XAML、WinJS)。然后这些框架会以更符合编程语言的方式暴露Core
对象,例如,CoreWindow.SizeChanged
在 XAML 中变成了Window.SizeChanged
事件,在 JavaScript 中变成了window.onresize
事件。CoreWindow.KeyDown
事件在 XAML 中变成了UIElement.KeyDown
事件,在 JavaScript 中则变成了HTMLElement.onkeydown
事件。一般而言,请使用框架对象而非Core
对象。 - Raymond Chen