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

问题描述

在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