Xamarin表示时间戳24小时

use*_*160 4 timepicker xamarin xamarin.forms

我是Xamarin.Forms的新手,我似乎无法找到如何以24小时格式而不是AM/PM显示对话框

有人能帮我吗 ?

谢谢

Mar*_*ván 9

这个页面对于学习如何在 C# 中格式化日期非常有用:

https://msdn.microsoft.com/en-us/library/8kb3ddd4%28v=vs.110%29.aspx

使用此代码,我能够显示 24 小时格式:

TimePicker timePicker = new TimePicker
{
   Format = "HH:mm"
};
Run Code Online (Sandbox Code Playgroud)

  • 这不是很明显,但这实际上也将 TimePicker 弹出对话框更改为 24 小时格式。 (2认同)

Mr.*_*çak 8

我发现的唯一解决方案是: 24小时时间戳

基本上,每个平台项目中都需要一个自定义渲染器.

Xamarin.iOS:

using MonoTouch.Foundation;
using MonoTouch.UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using PersonalTrainer.iOS.View.Controls;

[assembly: ExportRenderer (typeof (TimePicker), typeof     (TimePicker24HRenderer))]

namespace YourNamespace.iOS.View.Controls {
    public class TimePicker24HRenderer : TimePickerRenderer {
        protected override void OnElementChanged(ElementChangedEventArgs<TimePicker> e) {
            base.OnElementChanged(e);
            var timePicker = (UIDatePicker)Control.InputView;
            timePicker.Locale = new NSLocale("no_nb");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

对于Android:

[assembly: ExportRenderer(typeof(TimePicker), typeof(TimePicker24HRenderer))]

namespace YourNamespace.Droid.View.Controls {

    public class TimePicker24HRenderer : 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.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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

对于Windows Phone:

[assembly: ExportRenderer (typeof (MyTimePicker), typeof (TimePicker24HRenderer))]

namespace YourNamespace.WindowsPhone.View.Controls {

    public class TimePicker24HRenderer : TimePickerRenderer {

        // Override the OnElementChanged method so we can tweak this renderer post-initial setup

        protected override void OnElementChanged (ElementChangedEventArgs<Xamarin.Forms.TimePicker> e) {
            base.OnElementChanged (e);

            if (Control != null) {
                var nativeControl = (Windows.UI.Xaml.Controls.TimePicker)Control;
                nativeControl.Foreground = new SolidColorBrush(Colors.Gray);

                Control.ClockIdentifier = "24HourClock";
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)