在 xamarin.forms 中使用 c# 的长按检测器
Posted
技术标签:
【中文标题】在 xamarin.forms 中使用 c# 的长按检测器【英文标题】:Long Press Detector with c# in xamarin.forms 【发布时间】:2018-03-17 22:53:48 【问题描述】:我正在制作一个简单的计算器应用程序,其中 DEL 按钮会删除视口中的最后一位数字,但如果按住一秒钟,它会删除视口中的所有内容。现在,如果我按下按钮一次,无论我是否按住它,它都会删除最后一个数字。如果我再次按下它(按住或只是常规点击)它会清除视口中的所有内容,我无法输入任何其他内容。
首先我像这样创建计时器:
public System.Timers.Timer timer = new System.Timers.Timer(1);
然后我就有了按下“DEL”按钮时的功能:
private void DeletePressed(object sender, EventArgs args)
timer.Stop();
timer.Start();
timer.Elapsed += AllClear;
释放按钮时停止计时器并从视口中删除最后一个字符的函数:
private void DeleteReleased(object sender, EventArgs args)
timer.Stop();
if (CalculatorString.Length > 0)
CalculatorString = CalculatorString.Remove(CalculatorString.Length - 1);
viewport.Text = CalculatorString;
最后是计时器结束时调用的过程:
private void AllClear(Object Source, System.Timers.ElapsedEventArgs e)
timer.Stop();
CalculatorString = "";
viewport.Text = CalculatorString;
然而,我所期望的一切都没有发生。我提前感谢任何帮助:)
【问题讨论】:
每次按下删除按钮时,您都在添加另一个事件处理程序来处理 elapsed。 他们每个人都会说清楚。我不确定是什么在调用计时器启动,但看起来您并没有删除处理程序public System.Timers.Timer timer = new System.Timers.Timer(1);
启动 1 个 毫秒 计时器,而不是 1 秒计时器。用 1000 而不是 1 调用它。
【参考方案1】:
在 Xamarin.Forms(PCL) 中没有直接收听长按的方法。您必须为每个平台编写单独的自定义渲染器以聆听长按并将其传达给 PCL。 您可以参考this link 的代码示例以执行相同操作。
【讨论】:
以上是关于在 xamarin.forms 中使用 c# 的长按检测器的主要内容,如果未能解决你的问题,请参考以下文章
使用 xamarin.forms 跨平台 C# 在设备日历上设置提醒
使用 Xamarin.Forms(xaml 和 c#)创建超链接
如何在 Visual Studio 2019 中使用 Xamarin Forms(UWP) 和 C# 创建 Web 应用程序
如何使用 c# 将单个 html 行绑定到 xamarin.forms 中的多个标签