在Xamarin Forms中如何将TimePicker设置为当前时间?
解决TimePicker无法显示当前时间的问题
看起来你在设置TimePicker默认显示当前时间时遇到了小问题,我来帮你梳理下可能的原因和解决方案:
首先得明确你用的是WPF还是UWP(这两个框架的TimePicker API有细微差异),我分两种常见情况给你针对性的解决办法:
如果你用的是WPF
WPF的TimePicker控件根本没有Time这个属性,它用来设置选中时间的是SelectedTime(类型是Nullable<TimeSpan>)。你之前的代码用错了属性,这就是为啥设置不生效!修改后的代码应该是这样:
// 别在构造函数里写,放到页面加载完成的事件里(比如Window_Loaded) TimePicker.SelectedTime = DateTime.Now.TimeOfDay;
你XAML里的TimePicker命名是对的(x:Name="TimePicker"),这部分没问题。
如果你用的是UWP
UWP的TimePicker确实有Time属性,但如果直接在构造函数里设置,很可能因为控件还没完成初始化而不生效。你得把设置代码放到页面的Loaded事件里:
- 先给页面加上Loaded事件(在XAML的根标签里):
<Page ... Loaded="Page_Loaded"> <!-- 你的DatePicker和TimePicker代码保持不变 --> </Page>
- 然后在.cs文件里实现这个事件的处理逻辑:
private void Page_Loaded(object sender, RoutedEventArgs e) { // 同时把DatePicker也设为当前日期,省得单独写 DatePicker.Date = DateTime.Now.Date; // 设置TimePicker为当前时间 TimePicker.Time = DateTime.Now.TimeOfDay; }
额外要排查的点
- 检查代码执行时机:一定要等控件初始化完成后再设置时间,构造函数里控件还没渲染,设置了也白搭。
- 有没有数据绑定冲突:如果你的
TimePicker后续绑定了initialmedfeedback.Datetimetaken,而这个属性的时间部分本来就是00:00,那双向绑定会把你手动设置的时间覆盖掉。你可以检查下initialmedfeedback初始化时Datetimetaken的默认值是不是有问题。
给你个完整的UWP示例参考:
.cs文件:
public MainPage() { this.InitializeComponent(); } private void Page_Loaded(object sender, RoutedEventArgs e) { DatePicker.Date = DateTime.Now.Date; TimePicker.Time = DateTime.Now.TimeOfDay; } // 假设你有个保存按钮的点击事件 private void SaveBtn_Click(object sender, RoutedEventArgs e) { DateTime FeedbackdateTime = DatePicker.Date.Add(TimePicker.Time); initialmedfeedback.Datetimetaken = FeedbackdateTime; // 这里写你的保存逻辑 }
.xaml文件:
<Grid> <DatePicker x:Name="DatePicker" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="4" /> <TimePicker x:Name="TimePicker" Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="4" /> <Button Grid.Row="8" Content="保存" Click="SaveBtn_Click" /> </Grid>
这样调整后,TimePicker应该就能正确显示当前时间了~
内容的提问来源于stack exchange,提问作者MarkPW




