我一直在为Win 8开发一个应用程序。该应用程序使用长按。这一切都适用于触控设备。但是现在我意识到了其他的东西,长按不适用于非触摸设备。当我在本地机器上运行应用程序时,所有内容都呈现,但长时间的触摸消失了!
非触摸式PC没有长按吗?
我正在检查触控平板电脑和非触摸电脑上的应用程序,相同的应用程序示例日历表现不同。点击/触摸日期时打开的页面在两个设备中都不同?他们怎么做到这一点?保持不同的代码??
我需要长按我的应用程序。如何让它在非触摸式PC上运行?右键单击鼠标会弹出导航栏!我需要在hold和pointer事件中编写相同的代码吗?
现在该怎么做! (紧急!)
答案 0 :(得分:2)
您可以使用计时器以及PointerPressed和PointerReleased事件来模拟此过程。
你可以像这样创建简单的计时器
private bool _isTimerActive = false;
private int _timeInMS = 0;
private const int Delay = 1500; // wait for 1.5 sec
private async void StartTimer()
{
_isTimerActive = true;
while (_isTimerActive)
{
await Task.Delay(10);
_timeInMS += 10;
if (_timeInMS > Delay)
{
_holdingAction(null, null); // Do the suitable action after holding for 1.5 secounds
StopTimer();
}
}
}
private void StopTimer()
{
_isTimerActive = false;
_timeInMS = 0;
}
然后你必须为.cs中的每个按钮添加事件处理程序,因为按钮控件不允许触发PointerPressed和PointerReleased事件。
像那样:MyButton.AddHandler(PointerPressedEvent, new PointerEventHandler(Button_PointerPressed), true);
MyButton.AddHandler(PointerReleasedEvent, new PointerEventHandler(Button_PointerReleased), true);
最后,您可以使用委托来定义每个按钮的操作
private delegate void HoldingAction(object sender, HoldingRoutedEventArgs e);
private HoldingAction _holdingAction;
// your Long-press event
private void Button_Holding(object sender, HoldingRoutedEventArgs e)
{
//Your awesome code here.
}
private void Button_PointerPressed(object sender, PointerRoutedEventArgs e)
{
StartTimer();
_holdingAction = Button_Holding;
}
private void Button_PointerReleased(object sender, PointerRoutedEventArgs e)
{
StopTimer();
}