我有一个要求,我必须将所有时间选择器和选定的时间格式更改为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小时,但这是第一次,它采用了设备的时间格式设置。
答案 0 :(得分:0)
应该有一个is24HourView。
您已经覆盖了吗?
---编辑,好.. ---
两个时钟,一个为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);