首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在点击Xamarin表单后暂时禁用按钮,即使是在应用程序中导航?

问如何在点击Xamarin表单后暂时禁用按钮,即使是在应用程序中导航?
EN

Stack Overflow用户
提问于 2020-05-14 00:43:00
回答 1查看 69关注 0票数 0

我正在制作一个投票应用程序,我希望用户只被允许投票一次/天。我有一个主页,在这个页面上,多个按钮导航到不同的页面(在那里用户可以投票).On投票“页面”我有一个按钮,当按下时,它上传到数据库中的投票,并在它被禁用了一段时间。但是,如果我来回切换(投票页面->主页->投票页面),该按钮将再次启用。我该如何解决这个问题,这样无论我导航到哪里,按钮都将保持禁用状态?我写下了我用来禁用投票页面上按钮的代码,但正如我所说的,每当我离开页面时,按钮将再次启用。

代码语言:javascript
复制
public void ImageButton_Clicked(object sender, EventArgs e)
       {
           Timer aTimer = new Timer();
               myButton.IsEnabled = false;    
               aTimer.Interval = 5000; //ms
               aTimer.Enabled = true;
               aTimer.Elapsed += ATimer_Elapsed;

       }

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

按钮的Xaml定义。

代码语言:javascript
复制
<ImageButton 
x:Name="myButton"
Clicked="ImageButton_Clicked" >
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-14 09:58:03

我猜你想在使用导航离开页面时存储数据,如果是,我建议你可以使用Xamarin.Essentials: Preferences来保存当前的用户数据。

对于MainPage:

代码语言:javascript
复制
 private void btn1_Clicked(object sender, EventArgs e)
    {
        Navigation.PushAsync(new Page15());
    }

对于VotePage:

代码语言:javascript
复制
 public partial class Page15 : ContentPage
{  
    public DateTime dt;
    public Page15()
    {
        InitializeComponent();        
        DateTime currentdate = DateTime.Now;

        bool haskey = Preferences.ContainsKey("user1");
        if(haskey)
        {
            string date = Preferences.Get("user1", "");
            if (date != null)
            {
                dt = Convert.ToDateTime(date);
                TimeSpan timediff = currentdate - dt;

                if(timediff.Seconds<10)
                {
                    btnvote.IsEnabled = false;
                }
            }             
        }           
    }

    private void btnvote_Clicked(object sender, EventArgs e)
    {          
        dt = DateTime.Now;

        //save count into database or local
        btnvote.IsEnabled = false;

    }

    protected override void OnDisappearing()
    {
        base.OnDisappearing();
        string clickdate = dt.ToString();
        Preferences.Set("user1", clickdate);
    }
}

在我的代码中,我禁用了投票后10秒内的按钮,您可以使用timediff.Days;timediff.Minutes来更改日期时间差。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61780168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档