长按非触摸设备Windows 8

时间:2013-10-30 13:44:09

标签: windows-8 long-press

我一直在为Win 8开发一个应用程序。该应用程序使用长按。这一切都适用于触控设备。但是现在我意识到了其他的东西,长按不适用于非触摸设备。当我在本地机器上运行应用程序时,所有内容都呈现,但长时间的触摸消失了!

非触摸式PC没有长按吗?

我正在检查触控平板电脑和非触摸电脑上的应用程序,相同的应用程序示例日历表现不同。点击/触摸日期时打开的页面在两个设备中都不同?他们怎么做到这一点?保持不同的代码??

我需要长按我的应用程序。如何让它在非触摸式PC上运行?右键单击鼠标会弹出导航栏!我需要在hold和pointer事件中编写相同的代码吗?

现在该怎么做! (紧急!)

1 个答案:

答案 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();
}