如何使用 cppwinrt 为 OnPointerEntered 声明处理程序?

How to declare handler for OnPointerEntered using cppwinrt?

在 cppwinrt 中(xaml 尚不可用)我有一个用于 Button 的 PointerEntered 事件的处理程序,它工作正常。但是在尝试删除显示为图像的此按钮的默认悬停行为时,似乎我可能需要改为处理 OnPointerEntered 事件 - 我已经看到涉及使用 xaml 触发器的解决方案,这似乎是一个代码等价物。但是 OnPointerEntered 有一个不同的参数列表,我找不到调用它的方法来构建。以下是成功声明 PointerEntered 事件句柄的方式:

button.PointerEntered([&](winrt::Windows::Foundation::IInspectable const & sender, Windows::UI::Xaml::RoutedEventArgs const & args) { EnteredButton(); });

构建并正确调用 EnteredButton。但是

button.OnPointerEntered([&](winrt::Windows::UI::Xaml::Input::PointerRoutedEventArgs const & e)
{
    EnteredButton();
});

不会构建 - 我声明错误但不确定如何,在尝试了一些变体之后。 (可能没有必要使用完全限定的名称,但在任何一种情况下似乎都不会造成伤害)。 OnPointerEntered 可以在cppwinrt 中使用吗,如果可以的话如何声明?我尝试使用 IPointerRoutedEventArgs 而不是 PointerRoutedEventArgs 没有效果。或者 - 如果有人知道在使用 cppwinrt 创建的按钮中禁用悬停效果的不同方法,那就行得通了。

你不能按照你的要求去做。回应 IInspectable 的评论:

  • PointerEntered 是 Windows::UI::Xaml::UIElement 上的一个事件。您的代码正确地为其声明了一个处理程序。
  • OnPointerEntered 不是事件,因此无法处理它。这是一个可覆盖的方法,您可以为其提供自己的实现。