在不同环境中将 UI 元素传入和传出 Windows 运行时组件?

Passing UI elements to and from Windows Runtime Component in different environments?

我想知道是否有一种方法可以创建允许使用来自不同环境的 UI 个元素的运行时组件(例如用 C# 编写)。

例如,我想将 UI 元素附加到给定的 Panel (C#) 或 div (Javascript) .

我可以像这样在运行时组件中调用方法吗:cmpt.setPlayer((Panel) playerParent); (C#) 和 cmpt.setPlayer(getElementByClass('.playerParent')); (Javascript)。 这有可能吗?

如果没有(我会完全理解),有没有一种方法可以创建 one 运行时组件,它提供了两种声明函数的方式,一种用于调用来自 C#,一个用于 Javascript?

实际上不可能在 HTML/CSS 呈现引擎(JS 应用程序)和 C#/C++ 组件之间共享 UI 元素。 C# 代码不会有理解 HTML 元素对象的底层运行时。同样,XAML 中的 UI 元素对 JS 应用程序中的 HTML/CSS 引擎没有任何意义。简而言之,UI 元素无法跨该边界共享,因此 Windows 运行时组件用于非 UI 功能。

关于你的第二个问题,组件的结构并未按照你的建议进行,即具有单独的 C# 和 JS 方法,因为你无法在 JavaScript 中开始实施组件。这个想法是用 C# 或 C++ 编写的方法由运行时 投影 到 JavaScript,但它仍然以这些语言实现。

为 Windows 商店应用程序开发 UI 相关库的人通常会为 C#/C++ 和 JS 实现单独的版本,因为存在这些差异。当然,非 UI 的东西可以进入它自己的 WinRT 组件,我认为你可以让 JS 库将东西附加到来自组件的命名空间,因为后者作为 JS 对象投射到 JS 中像其他任何人一样。这种混合方法会将您的 API 表面区域保留在一个名称空间中,即使它具有混合实现。不过我还没试过。

另一种方法可能是让 WinRT 组件使用各种回调来指示主机应用程序执行 UI 任务,这必然包括创建 UI 元素。该组件可以管理参数和底层数据模型,即,并使用这些回调来相应地触发 UI 工作。

值得一提的是,在我的免费电子书 Programming Windows Store Apps with HTML, CSS, and JavaScript, 2nd Edition.

的第 18 章中,我对 WinRT 组件(包括异步)进行了相当详尽的处理。