单击Xamarin表单后如何临时禁用按钮?

用户13532840

我正在Xamarin Forms提交民意调查应用程序,我希望用户每天只能投票一次。在UI页面上,我创建了一个ImageButton,希望用户每天一次可以单击它。我尝试使用计时器,并尝试以5秒的间隔对其进行测试。第一次单击时,应用程序禁用了该按钮,但是5秒钟后,我可以再次单击它,但它不会禁用该按钮。

private void ImageButton_Clicked(object sender, EventArgs e)
{
   this.IsEnabled = false;
   Timer aTimer = new Timer();
   aTimer.Interval = 5000; //ms
   aTimer.Enabled = true;
   aTimer.Elapsed += ATimer_Elapsed;
}

private void ATimer_Elapsed(object sender, ElapsedEventArgs e)
{
  this.IsEnabled = true;       
}

我看到应用程序ImageButton_Clicked一直都在进入函数,但它没有执行this.IsEnabled=false

米哈伊尔·杜切夫(Mikhail Duchev)

实际上,该应用程序正在执行您所告知的操作。

this.IsEnabled是工作,但这个被引用的页面本身。如果要单击以禁用已触发事件的按钮,那么您需要:

private void ImageButton_Clicked(object sender, EventArgs e)
{
    if (sender is Button button)
    {
        button.IsEnabled = false;
        // the rest of the logic
    }
}

在这里,我们将转换sender为Xamarin.Forms。按钮如果转换成功,即如果发送者是我们的按钮,那么我们可以将其禁用。

如果您不想转换它,或者想在另一种方法中使用按钮引用(例如再次启用它),只需Name在xml中使用属性设置按钮,如下所示:

<Button 
    x:Name="myButton"
    Clicked="ImageButton_Clicked" />

然后,您可以在ATimer_Elapsed类似以下方法的代码中使用它

private void ATimer_Elapsed(object sender, ElapsedEventArgs e)
{
    Device.BeginInvokeOnMainThread(() => { myButton.IsEnabled = true; });
}

编辑:在计时器主/ UI线程调用here非常重要,因为计时器逻辑是在后台线程上完成的。IsEnabled = true

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章