PointerPressed与Tapped

时间:2017-05-22 11:02:38

标签: uwp windows-10-universal c++-cx

在我的Win10应用程序中,用户可以使用Surface触控笔点击屏幕并在图像画布上放置形状。这非常有效,但是有时候应用程序会调用PointerPressed两次的错误 - 导致添加两个形状。 我已经尝试将代码移动到Tapped回调。但是,Tapped使用TappedRoutedEventArgs^限制,我无法弄清楚如何获取与PointerRoutedEventArgs^相同的信息。
我目前使用...

onPenTouched(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e){

   PointerPoint^ p = e->GetCurrentPoint(imgCanvas);

   if (p->Properties->IsEraser){
        //do stuff
   }
}

确定正在使用笔的哪一端 如何从TappedRoutedEventArgs获取此信息?

我尝试在this almost-duplicate question中建议的解决方案建议使用bool标志来阻止双重调用,但这不起作用。

更新 使用Jayden Gu中建议的解决方法实现了能够获得PointerPoint^的目标,但是属性不是预期的。像这样调试输出......

OutputDebugString(p->Properties->IsEraser.ToString()->Data());
OutputDebugString(p->Properties->IsInverted.ToString()->Data());
OutputDebugString(p->Properties->IsPrimary.ToString()->Data());

如下所示

Tapping with pen tip =  false false true  
Tapping with pen eraser = false true true  
Tapping with finger = false false true  

现在我必须使用IsInverted属性来检测是否正在使用擦除。希望它是一个可靠和稳定的价值。

1 个答案:

答案 0 :(得分:0)

当我们点按“控制”时,PointerPressed事件将被触发,Tapped事件将在PointerPressed事件后触发。当我们快速点击两次控制时,Tap事件将被触发一次。当我们第二次点击控件时,只会触发PointerPressed。这是设计的。

如果您想在Point事件中获得Tapped,我们可以使用TappedRoutedEventArgs.GetPosition方法来获取观点。

如果您想在PointerRoutedEventArgs事件中获取Tap,作为解决方法,我们可以在您的代码中定义TappedRoutedEventArgs属性。我们可以在TappedRoutedEventArgs事件中为PointerPressed设置PointerPressed。我们可以在TappedRoutedEventArgs事件中获得Tap

例如:

Windows::UI::Xaml::Input::PointerRoutedEventArgs^ nowPointerRoutedEventArgs;


void App2::MainPage::Rectangle_Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
{
    Windows::UI::Input::PointerPoint^ p = nowPointerRoutedEventArgs->GetCurrentPoint(imgCanvas);
}

void App2::MainPage::Rectangle_PointerPressed(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
{
    nowPointerRoutedEventArgs = e;
}