【问题标题】:CoreApplicationView vs CoreWindow vs ApplicationViewCoreApplicationView vs CoreWindow vs ApplicationView
【发布时间】:2018-07-30 09:33:01
【问题描述】:

CoreApplicationViewCoreWindowApplicationView 有什么区别?

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

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

【问题讨论】:

  • Core 对象通常供应用程序框架使用(XAML、WinJS)。然后,这些框架以与编程语言更匹配的方式公开Core 对象,例如,CoreWindow.SizeChanged 在 XAML 中变为 Window.SizeChanged 事件,在 JavaScript 中变为 window.onresize 事件。 CoreWindow.KeyDown 事件在 XAML 中变为 UIElement.KeyDown 事件,在 JavaScript 中变为 HTMLElement.onkeydown 事件,通常使用框架对象而不是核心对象。
  • @RaymondChen 谢谢。
  • @RaymondChen 可能值得将您的评论放在答案中:)

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


【解决方案1】:

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

  • 结构(参见从上到下部分)
  • 函数(参见For external or for inner部分)

我专门为这个问题写了一篇帖子,见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 应用视图

您可以阅读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 使用。

【讨论】:

    猜你喜欢
    • 2014-08-17
    • 2011-09-18
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 2010-12-09
    • 2017-06-20
    相关资源
    最近更新 更多