为啥在自定义 WinRT C++/CX 控件中默认添加 [Windows::Foundation::Metadata::WebHostHidden]?

Posted

技术标签:

【中文标题】为啥在自定义 WinRT C++/CX 控件中默认添加 [Windows::Foundation::Metadata::WebHostHidden]?【英文标题】:Why is [Windows::Foundation::Metadata::WebHostHidden] added by default in custom WinRT C++/CX controls?为什么在自定义 WinRT C++/CX 控件中默认添加 [Windows::Foundation::Metadata::WebHostHidden]? 【发布时间】:2012-09-24 15:43:57 【问题描述】:

当我在 WinRT C++/CX 项目中创建新控件时,Visual Studio 2012 默认添加类属性[Windows::Foundation::Metadata::WebHostHidden]

例子:

namespace WindowsRuntimeComponent1

    [Windows::Foundation::Metadata::WebHostHidden]
    public ref class MyUserControl sealed
    
    public:
        MyUserControl();
    ;

是否有任何记录的原因? (我做了功课,但我 找不到这条信息) 据我所知,使用属性[WebHostHidden] 使类 WinRT html/javascript 项目不可见。这是否意味着我 无法在 C++/CX 中创建可在 Javascript 中使用的控件?

【问题讨论】:

【参考方案1】:

据我所知,使用属性[WebHostHidden] 会使类对于 WinRT HTML/JavaScript 项目不可见。

这是正确的:这个属性隐藏了 JavaScript 投影中的类型,所以从 JavaScript 来看,就好像该类型不存在。

这是否意味着我无法在 C++/CX 中创建可在 JavaScript 中使用的控件?

您不能使用 JavaScript 中的 XAML 控件,句号。使用 JavaScript 时,UI 是使用 HTML 而非 XAML 创作的。

【讨论】:

是否有 other 用例,除了来自用户编写的控件,需要此属性?例如,假设我的 C++/Cx 组件根本没有处理 w/ UI,在这种情况下应该使用 WebHostHidden 注释这个组件?

以上是关于为啥在自定义 WinRT C++/CX 控件中默认添加 [Windows::Foundation::Metadata::WebHostHidden]?的主要内容,如果未能解决你的问题,请参考以下文章

在 .cpp 文件中声明具有实现的 C++/CX WinRT 属性的语法是啥?

如何在“native c ++”环境中使用WinRT IAsyncOperation *对象

vs2008时间控件设置默认值

相当于C ++ / WinRT中的Platform :: IBoxArray

为啥我必须在自定义 NIB / XIB 中连接 IBOutlet 两次?

为啥我使用此 WinRT 代码得到“'System.Array' 不包含 'AsBuffer' 的定义”?