.NET 多平臺應用程式 UI (.NET MAUI) TimePicker 會叫用平台的時間選擇器控件,並可讓您選取時間。
TimePicker 定義下列屬性:
-
Time的類型為TimeSpan,選擇的時間預設為TimeSpan0。 此TimeSpan類型表示自午夜以來的時間持續時間。 -
Format屬於string類型,是 標準 或 自定義 .NET 格式字串,預設為「t」的格式,即短時間模式。 -
TextColor類型為Color,用來顯示選取時間的顏色。 -
FontAttributes型別FontAttributes,預設為FontAtributes.None。 -
FontFamily型別string,預設為null。 -
FontSize類型為double,預設為 -1.0。 -
CharacterSpacing是double類型的文字字元 TimePicker 之間的間距。
所有這些屬性都受到 BindableProperty 物件支援,這表示可以設定樣式,而且屬性可以是數據系結的目標。 屬性 Time 的預設系結模式 BindingMode.TwoWay為 ,這表示它可以是使用 Model-View-ViewModel (MVVM) 模式之應用程式中數據系結的目標。
TimePicker 定義下列屬性:
-
Time的類型TimeSpan?,選取的時間。 設定為null表示未選取時間。 非空值必須小於 24 小時且 >= 0 毫秒。 -
Format屬於string類型,是 標準 或 自定義 .NET 格式字串,預設為「t」的格式,即短時間模式。 -
TextColor類型為Color,用來顯示選取時間的顏色。 -
FontAttributes型別FontAttributes,預設為FontAtributes.None。 -
FontFamily型別string,預設為null。 -
FontSize類型為double,預設為 -1.0。 -
CharacterSpacing是double類型的文字字元 TimePicker 之間的間距。 -
IsOpen類型bool(雙向) 的,指出平台時間選擇器 UI 是否已開啟。
所有這些屬性都由物件支援 BindableProperty 。 此 Time 內容的預設繫結模式 BindingMode.TwoWay為 。
其他活動:
-
Opened和Closed事件指出何時顯示或關閉平台時間選擇器 UI。
備註
TimePicker不包含能指出新選取Time值的事件。 如果您需要收到此通知,您可以為PropertyChanged事件新增事件處理程式。
此外, TimePicker 定義 TimeSelected 事件,這會在選取的時間變更時引發。 事件 TimeChangedEventArgs 隨附 TimeSelected 的物件具有 NewTime 和 OldTime 屬性,分別指定新舊時間。
建立時間選擇器 (TimePicker)
Time在 XAML 中指定 屬性時,值會轉換成 TimeSpan 並經過驗證,以確保毫秒數大於或等於 0,且時數小於 24。 時間元件應該以冒號分隔:
<TimePicker Time="4:15:26" />
下列螢幕快照顯示 iOS 上產生的 TimePicker :
如果將BindingContext的TimePicker屬性設定為具有TimeSpan類型屬性SelectedTime的viewmodel實例(例如),您可以這樣實例化TimePicker:
<TimePicker Time="{Binding SelectedTime}" />
在此範例中,屬性 Time 會初始化為 SelectedTime viewmodel 中的 屬性。
Time由於屬性具有的TwoWay系結模式,因此用戶選取的任何新時間都會自動傳播至 viewmodel。
在程式代碼中 Time ,您可以將 屬性初始化為 類型的 TimeSpan值:
TimePicker timePicker = new TimePicker
{
Time = new TimeSpan(4, 15, 26) // Time set to "04:15:26"
};
如需設定字型屬性的詳細資訊,請參閱 字型。
TimePicker 和佈局
您可以使用不受限制的水平版面設定選項, 例如 Center、 Start或 End 搭配 TimePicker:
<TimePicker ···
HorizontalOptions="Center" />
不過,不建議這樣做。 根據屬性的 Format 設定,選取的時間可能需要不同的顯示寬度。 例如,“T” 格式字串會使 TimePicker 檢視以長格式顯示時間,而 “4:15:26 AM” 需要比 “4:15 AM” 短時間格式 (“t”) 更大的顯示寬度。 視平臺而定,此差異可能會導致 TimePicker 檢視在版面配置中變更寬度,或讓顯示器遭到截斷。
小提示
最好使用HorizontalOptions 配合Fill的預設設定,而不是在TimePicker儲存格中放入Auto時使用TimePicker的寬度。
平台差異
本節描述 控件 TimePicker 的平臺特定差異。
在 Android 上,控件會尊重和顯示 Format 屬性。 不過,當按下 控件來顯示選擇器控件時,只能變更一天中的小時、分鐘和時間。
可為 Null 的選取時間 (.NET 10)
在 .NET 10 中, TimePicker 支援可為 Null 的選取時間,因此您可以表示「未選取時間」,並在繫結中清除選取。 此 Time 屬性會 TimeSpan? 驗證任何非空值是否具有小時 < 24 且毫秒 >= 0。
繫結範例和清除選取範圍的指令:
<VerticalStackLayout>
<TimePicker Time="{Binding SelectedTime}" />
<Button Text="Clear time" Command="{Binding ClearTimeCommand}" />
<Label Text="Selected: {Binding SelectedTime}" />
<!-- Optional: display a placeholder when no time is selected -->
<Label IsVisible="{Binding SelectedTime, Converter={StaticResource NullToBoolConverter}}"
Text="No time selected" />
</VerticalStackLayout>
ViewModel 草圖:
public partial class MyViewModel : ObservableObject
{
[ObservableProperty]
private TimeSpan? selectedTime;
[RelayCommand]
void ClearTime() => SelectedTime = null;
}
備註
ViewModel 範例使用了 .NET Community Toolkit MVVM(CommunityToolkit.Mvvm)中的屬性。 使用它們時,安裝 CommunityToolkit.Mvvm NuGet 套件,並將 using CommunityToolkit.Mvvm.ComponentModel; 和 using CommunityToolkit.Mvvm.Input; 加入你的檔案。 欲了解更多資訊,請參閱 .NET 社群工具包 MVVM。
在程式碼中設定/清除:
timePicker.Time = null; // Clear selection (no time)
timePicker.Time = new TimeSpan(14, 30, 0); // 2:30 PM
以程式設計方式開啟和關閉時間選擇器
你可以透過控制選擇器的焦點來程式化開啟和關閉選取介面:
// Open the platform picking UI
picker.Focus();
// ... later, close the UI
picker.Unfocus();
平台說明:
- Android 在聚焦時顯示對話,當焦點不集中時則會忽略。
- iOS 與 Mac Catalyst 在聚焦時會呈現輸入視圖;失去焦點就結束了編輯。
- Windows 使用飛出/ComboBox;Focus 並不總是能在所有情境下強制下拉選單打開。 建議以使用者互動來開啟;若失焦則會關閉。