在我的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
属性来检测是否正在使用擦除。希望它是一个可靠和稳定的价值。
答案 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;
}