时间选择器未在Xamarin表单中以12小时格式显示时间

时间:2018-08-29 17:23:15

标签: c# .net xamarin xamarin.forms

我有一个要求,我必须将所有时间选择器和选定的时间格式更改为12小时,而与设备的时间格式无关。 此问题特定于Android。在iOS中运行正常。 我正在为两者使用自定义时间渲染器。

这是我在做什么:

在XAML中:

<customElements:CustomTimePicker x:Name="TimePickerName" Time="{Binding time}">
<StackLayout>
    <StackLayout.GestureRecognizers>
        <TapGestureRecognizer Tapped="Handle_TimePickerTapped" />
    </StackLayout.GestureRecognizers>
</StackLayout>
<TimePicker.Format>hh:mm tt</TimePicker.Format>

在Xaml.cs中:

void Handle_TimePickerTapped(object sender, System.EventArgs e)
    {

            Device.BeginInvokeOnMainThread(() =>
            {
                if(TimePickerName.IsFocused)
                {
                    TimePickerName.Unfocus();
                }
                if(!TimePickerName.IsFocused)
                { 
                TimePickerName.Focus();
                }
                TimePickerName.Format = "hh:mm tt";
            });
    }

在视图模型中:(从数据库中获取当前项目的时间)

 time = (TimeSpan)DBHelper.GetTime(CurrentItem).TimeOfDay;

在Custom Renderer中,即CustomTimePicker类:​​

protected override void OnElementChanged(ElementChangedEventArgs<TimePicker> e)
    {
        base.OnElementChanged(e);
        Control.TextSize = 14;
        Control.Text = DateTime.Now.ToString("hh:mm tt");
    }


 public void OnTimeSet(Android.Widget.TimePicker view, int hourOfDay, int minute)
    {
        var time = new TimeSpan(hourOfDay, minute, 0);
        this.Element.SetValue(Xamarin.Forms.TimePicker.TimeProperty, time);
        var dateTime = new DateTime(time.Ticks);
        var formattedTime = dateTime.ToString("h:mm tt", CultureInfo.InvariantCulture);
        this.Control.Text = formattedTime;
    }

我希望时间选择器为12小时格式,并且所选时间应为12小时格式,而不管手机的时间格式如何。 通过OnTimeSet方法进行帖子选择,我可以将其转换为12小时,但这是第一次,它采用了设备的时间格式设置。

1 个答案:

答案 0 :(得分:0)

应该有一个is24HourView。

https://developer.xamarin.com/api/member/Android.Widget.TimePicker.SetIs24HourView/p/Java.Lang.Boolean/

您已经覆盖了吗?

---编辑,好.. ---

两个时钟,一个为12小时制,目前显示为上午12:24。

<TimePicker x:Name="TimePicker12">
     <TimePicker.Format>hh:mm tt</TimePicker.Format>
</TimePicker>

另一个在24小时内显示在同一页面上,另一个显示为00:24。

<TimePicker x:Name="TimePicker24">
     <TimePicker.Format>HH:mm</TimePicker.Format>
</TimePicker>

隐藏代码:

TimePicker12.Time = TimeSpan.FromMinutes(DateTime.Now.Minute);
TimePicker24.Time = TimeSpan.FromMinutes(DateTime.Now.Minute);