为什么没有 SelectorT?

问题描述

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

struct DataGrid : SelectorT<DataGrid>
{
}

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

解决方法

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

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