问题描述
我正在尝试实现一个自定义控件(我称之为 DataGrid),我选择从 Selector
派生。在 cppwinrt 中,我写了一些这样的
struct DataGrid : SelectorT<DataGrid>
{
}
此代码无法编译。事实上,在任何附带的 Windows.UI.Xaml.Controls.Primitives.h 文件中都没有这样一个名为 SelectorT
的结构。我检查了 SDK (19041) 附带的 winmd 文件,发现 Selector
是 Composable
(具有 ComposableAttribute
属性),因此,应该已生成 SelectorT
,我错过了什么?非常感谢!
解决方法
没有 SelectorT
因为 Selector
不能被子类化。消费投影中的 TypenameT
类模板不是为了方便而提供的,它们的存在是为了提供支持它的 Xaml 类型的用户定义子类。这允许用户定义他们自己的 overrideable 方法实现。 (可以认为它类似于 C++ 虚函数,但采用复杂的 COM 聚合方式)
文档似乎没有清楚地说明哪些类可以被子类化,哪些不能。不过,您可以从类型上存在的 ComposableAttribute
推断出这一点,如 FrameworkElement 中所示。