首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Xamarin Timepicker禁用正按钮

Xamarin Timepicker禁用正按钮
EN

Stack Overflow用户
提问于 2017-10-06 19:47:38
回答 1查看 365关注 0票数 1

社区,

很长一段时间以来,我一直在尝试在Xamarin中禁用TimePicker的正向按钮,直到用户选择一个有效的时间。我想我将不得不使用一个自定义的渲染器来归档它。目前,我正在努力让它在android上运行,但是,因为我必须在IOs上实现它,所以我会非常感激这两个平台的解决方案(到目前为止,我只研究了android解决方案,因为我现在不能在IOs上测试它)。

我现在做的是如何在安卓系统中禁用对话框的正向按钮,但是我在TimePickerRenderer中找不到计时器对话框。我还试着使用这段代码,在那里我可以很容易地禁用正按钮。这里的问题是,一旦用户选择了一个小时,只有分钟是可以改变的。因此,第一次使用计时器时,它看起来很正常,但之后只能更改分钟。

代码:

代码语言:javascript
复制
public class MyTimePickerRenderer : ViewRenderer<Xamarin.Forms.TimePicker, Android.Widget.EditText>, TimePickerDialog.IOnTimeSetListener, IJavaObject, IDisposable
{
    private TimePickerDialog dialog = null;

    protected override void OnElementChanged(ElementChangedEventArgs<TimePicker> e)
    {
        base.OnElementChanged(e);
        this.SetNativeControl(new Android.Widget.EditText(Forms.Context));
        this.Control.Click += Control_Click;
        this.Control.Text = DateTime.Now.ToString("HH:mm");
        this.Control.KeyListener = null;
        this.Control.FocusChange += Control_FocusChange;
    }

    void Control_FocusChange(object sender, Android.Views.View.FocusChangeEventArgs e)
    {
        if (e.HasFocus)
            ShowTimePicker();
    }

    void Control_Click(object sender, EventArgs e)
    {
        ShowTimePicker();
    }

    private void ShowTimePicker()
    {
        if (dialog == null)
        {
            dialog = new TimePickerDialog(Forms.Context, this, DateTime.Now.Hour, DateTime.Now.Minute, true);
            dialog.SetOnShowListener(new OnTimeShowListener());
        }

        dialog.Show();
    }

    public void OnTimeSet(Android.Widget.TimePicker view, int hourOfDay, int minute)
    {
        var time = new TimeSpan(hourOfDay, minute, 0);
        this.Element.SetValue(TimePicker.TimeProperty, time);

        this.Control.Text = time.ToString(@"hh\:mm");
    }
}

OnShowListener():

代码语言:javascript
复制
public class OnTimeShowListener : Java.Lang.Object, IDialogInterfaceOnShowListener
{
    public void OnShow(IDialogInterface dialog)
    {
        ((TimePickerDialog)dialog).GetButton((int)DialogButtonType.Positive).Enabled = false;
    }
}

如果有人能帮助我,我将不胜感激!

致以最好的问候,托比亚斯

EN

回答 1

Stack Overflow用户

发布于 2018-10-10 03:24:21

必须先在对话框中调用Show(),然后才能访问这些按钮,因为它们事先是不可用的。

代码语言:javascript
复制
public void OnShow(IDialogInterface dialog)
{
    var timeDialog = (TimePickerDialog)dialog;
    timeDialog.Show();

    timeDialog.GetButton((int)DialogButtonType.Positive).Enabled = false;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46605013

复制
相关文章

相似问题

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