【问题标题】:Why there is no SelectorT?为什么没有 SelectorT?
【发布时间】:2021-04-14 12:33:56
【问题描述】:

我正在尝试实现一个自定义控件(我称之为 DataGrid),我选择从Selector 派生它。在 cppwinrt 中,我写了一些这样的

struct DataGrid : SelectorT<DataGrid>
{
}

此代码无法编译。事实上,在任何随附的 Windows.UI.Xaml.Controls.Primitives.h 文件中都没有这种名为 SelectorT 的结构。我检查了 SDK (19041) 附带的 winmd 文件,发现 SelectorComposable (具有 ComposableAttribute 属性),所以,SelectorT 应该已经生成,我错过了什么?非常感谢!

【问题讨论】:

  • 看来Selector 没有声明任何构造函数(在winmd 中)。这意味着没有任何工厂。对于收件箱控件,如ListBox(派生自Selector),我相信它直接使用构造函数。 IE。在文档中的同一编译单元中创作和消费的情况。所以我相信我不能从外部推导出Selector

标签: c++-winrt cppwinrt


【解决方案1】:

没有SelectorT,因为Selector 不能被子类化。消费投影中的 TypenameT 类模板不是为了方便而提供的,它们的存在是为了提供支持它的 Xaml 类型的用户定义子类。这允许用户定义他们自己的可覆盖方法的实现。 (认为​​它类似于 C++ 虚函数,但采用复杂的 COM 聚合方式)

文档似乎并没有清楚地说明哪些类可以子类化,哪些不能。不过,您可以从类型上是否存在 ComposableAttribute 推断出这一点,如 FrameworkElement

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2015-06-20
    • 2010-12-10
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多