我应该如何在 cppwinrt 中将 AddHandler 与 Handler 对象一起使用?

How should I use AddHandler in cppwinrt with Handler objects?

在 C++/WinRT 反射中,API AddHandler 定义为

UIElement::AddHandler(Windows::UI::Xaml::RoutedEvent const& routedEvent, Windows::foundation::IInspectable const& handler, bool handledEventsToo) const

但处理程序似乎只继承自 IUnknown。例如,这是 KeyEventHandler:

的声明

struct KeyEventHandler : Windows::foundation::IUnknown

注册事件处理程序的解决方案是什么?

看来我们需要调用 box_value(handler) 将其转换为 IInspectable。一点都不明显,你在 MSDN 上找不到任何示例。

详细说明 iohanson 的回答,是的,代表需要装箱。 WinRT 委托是 IUnknown,而不是 IInspectableAddHandler 期望得到 IReference<T>,其中 TRoutedEvent.

的代表

我在 cppwinrt 上开了一个问题,看看我们是否可以获得一些更有用的重载,因为 cppwinrt 我们不做 CX 用户喜欢的魔术拳击。 https://github.com/microsoft/cppwinrt/issues/776