Xamarin.Forms Android DatePicker / TimePicker按钮侦听器

少年恃险若平地,独倚长剑凌清秋。这篇文章主要讲述Xamarin.Forms Android DatePicker / TimePicker按钮侦听器相关的知识,希望能为你提供帮助。
【Xamarin.Forms Android DatePicker / TimePicker按钮侦听器】我需要知道用户是否点击取消或确定按钮在xamarin.Forms android应用程序的日期/时间选择器中。
我已经尝试将功能添加到Click事件,但从未触发过。
这是我的代码(类似于TimePicker):

using Android.Content; using MyApp.Droid; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; using MyApp.Models; using java.Util; [assembly: ExportRenderer(typeof(DatePicker), typeof(DatePickerCustomRenderer))]namespace MyApp.Droid { public class DatePickerCustomRenderer : DatePickerRenderer {public DatePickerCustomRenderer(Context context) : base(context) { } protected override void OnElementChanged(ElementChangedEventArgs< DatePicker> e) { base.OnElementChanged(e); Locale locale = new Locale(Utente.FormatoPerDateTimePicker); Control.TextLocale = locale; Control.Click += Control_Click; }private void Control_Click(object sender, System.EventArgs e) { // This function is never called :( throw new System.NotImplementedException(); } } }

我该怎么做?
答案
[我需要知道用户是否在xamarin.Forms Android应用程序的日期/时间选择器中点击“取消”或“确定”按钮。
使用Xamarin.Form的DatePicker,您不能这样做。 Xamarin.Forms.DatePicker渲染到EditText控件中。不幸的是弹出窗口DatePickerDialog并未对用户公开。您可以从Source Codes of DatePickerRenderer看到它。
因此,如果您确实要检测确定/取消按钮的单击事件。您需要根据源代码实现自己的DatePickerRenderer。
另一答案使用以下Android DatePicker自定义渲染器,您可以完全控制OK和CANCEL。
using Android.App; using Android.Content; using ???.Android.Renderers; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; using DatePicker = Android.Widget.DatePicker; [assembly: ExportRenderer(typeof(DatePicker), typeof(FixedDatePickerRenderer))] namespace ???.Android.Renderers { public class FixedDatePickerRenderer : Xamarin.Forms.Platform.Android.DatePickerRenderer { public FixedDatePickerRenderer(Context context) : base(context) { }protected override void OnElementChanged(ElementChangedEventArgs< Xamarin.Forms.DatePicker> e) { base.OnElementChanged(e); //Disposing if (e.OldElement != null) { _element = null; }//Creating if (e.NewElement != null) { _element = e.NewElement; } }protected Xamarin.Forms.DatePicker _element; protected override DatePickerDialog CreateDatePickerDialog(int year, int month, int day) { var dialog = new DatePickerDialog(Context, (o, e) => { _element.Date = e.Date; ((IElementController)_element).SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, false); }, year, month, day); dialog.SetButton((int)DialogButtonType.Positive, Context.Resources.GetString(global::Android.Resource.String.Ok), OnOk); dialog.SetButton((int)DialogButtonType.Negative, Context.Resources.GetString(global::Android.Resource.String.Cancel), OnCancel); return dialog; }private void OnCancel(object sender, DialogClickEventArgs e) { _element.Unfocus(); //((FixedDatePicker) _element)?.CallOnCancel(); } private void OnOk(object sender, DialogClickEventArgs e) { //need to set date from native control manually now _element.Date = ((DatePickerDialog)sender).DatePicker.DateTime; _element.Unfocus(); //((FixedDatePicker)_element)?.CallOnOk(); }}}

仅对于寻求避免搜索ios的完整解决方案的人们,现成的选项已经包含:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/platform/ios/datepicker-selection

    推荐阅读