2013-10-30 34 views
1

我一直在为Win 8开发应用程序。该应用程序使用长按。这一切在触摸设备上都能正常工作。但是现在我意识到别的东西了,长按不能用于非触摸设备。当我在本地机器上运行应用程序时,一切都呈现,但长时间的触摸消失了!长按非触控设备Windows 8

非触摸式个人电脑上没有长按吗?

我在触摸平板电脑和非触摸PC上查看应用程序,同一个应用程序示例日历的行为不同。点击/触摸日期时打开的页面在两个设备中是不同的?他们如何做到这一点?维护不同的代码?

我需要长时间按下我的应用程序。我如何让它在非触摸式电脑上运行?鼠标右键点击导航栏!我需要在保持和指针事件中编写相同的代码

现在该怎么做! (panic!)

回答

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(); 
} 
+0

感谢您的回答。但是如果我有一个'Button'的Button_Click',并且我还需要连接一个长按钮?我试过你的答案,但似乎'PointerReleased'处理程序根本没有被调用。有什么建议么? – Agent007

+0

我终于使用了正确的tapped事件 – alfah