您可以使用定时器以及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();
}
感谢您的回答。但是如果我有一个'Button'的Button_Click',并且我还需要连接一个长按钮?我试过你的答案,但似乎'PointerReleased'处理程序根本没有被调用。有什么建议么? – Agent007
我终于使用了正确的tapped事件 – alfah