【问题标题】:How to hide Cancel button in date picker in Xamarin.Forms如何在 Xamarin.Forms 的日期选择器中隐藏“取消”按钮
【发布时间】:2026-02-03 13:15:01
【问题描述】:

我遇到了日期选择器不应该弹出取消选项的情况。背后的原因是,用户必须从日期选择器中选择所需的日期。这里的日期选择器默认采用今天的日期,因此,当用户打开日期选择器并单击 Ok 时,Date selected 事件不会发生。如果我使用Unfocuss 事件,即使用户也单击取消,它也会触发。所以,我在想的是隐藏取消按钮,因为 xamarin.forms 中的日期选择器 CancelOk 没有任何直接事件。 有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: android xamarin.forms datepicker


    【解决方案1】:

    您可以使用CustomRenderer来实现这个效果,找到Cancel按钮,然后将其Visibility属性设置为Gone。如下所示:

    [assembly: ExportRenderer(typeof(Xamarin.Forms.DatePicker), typeof(MyDatePicker))]
    namespace YourNamepace.Droid
    {
       class MyDatePicker:DatePickerRenderer, IOnDateSetListener
       {
    
          private DatePickerDialog datePickerDialog;
          private Context context;
          private DateTime currently;
    
          public MyDatePicker(Context context) : base(context)
          {
            this.context = context;
          }
    
    
          protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.DatePicker> e)
          {
            base.OnElementChanged(e);
            currently = DateTime.Now;
            this.Control.Click += Control_Click;
    
          }
    
          private void Control_Click(object sender, EventArgs e)
          {
    
            datePickerDialog = new DatePickerDialog(context,this,currently.Year,currently.Month - 1, currently.Day);
            datePickerDialog.Show();
            Android.Widget.Button cancel = datePickerDialog.GetButton((int)DialogButtonType.Negative);
            cancel.Visibility = ViewStates.Gone;
          }
    
          public void OnDateSet(Android.Widget.DatePicker view, int year, int month, int dayOfMonth)
          {
            DateTime selectedDate = new DateTime(year, month + 1, dayOfMonth);
            currently = selectedDate;
            Control.Text = selectedDate.ToShortDateString();
          }
    
     }
    

    【讨论】:

    • 谢谢@Leo Zhu - MSFT,我已经添加了这个渲染器,但我得到了两个日期选择器。一个带取消选项,另一个不带取消选项。
    • &lt;DatePicker Grid.Column="1" IsVisible="False" x:Name="FromDatePicker" Format="dd-MM-yyyy" FontSize="Small" Unfocused="From_DateSelected" HorizontalOptions="FillAndExpand"/&gt; 这就是我声明对我的 xaml 的控制的方式。请让我知道我哪里做错了。
    • @user10594374 尝试像&lt;DatePicker x:Name="FromDatePicker" &gt; &lt;/DatePicker&gt; 一样使用它,看看它是否仍然显示两个选择器。它在我这边运行良好。
    • 真棒@Leo Zhu - MSFT,它的工作。非常感谢:)