共用方式為


TimePicker

.NET 多平臺應用程式 UI (.NET MAUI) TimePicker 會叫用平台的時間選擇器控件,並可讓您選取時間。

TimePicker 定義下列屬性:

  • Time 的類型為 TimeSpan,選擇的時間預設為 TimeSpan 0。 此 TimeSpan 類型表示自午夜以來的時間持續時間。
  • Format 屬於 string 類型,是 標準自定義 .NET 格式字串,預設為「t」的格式,即短時間模式。
  • TextColor 類型為Color,用來顯示選取時間的顏色。
  • FontAttributes 型別 FontAttributes,預設為 FontAtributes.None
  • FontFamily 型別 string,預設為 null
  • FontSize 類型為 double,預設為 -1.0。
  • CharacterSpacingdouble 類型的文字字元 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。
  • CharacterSpacingdouble 類型的文字字元 TimePicker 之間的間距。
  • IsOpen 類型 bool (雙向) 的,指出平台時間選擇器 UI 是否已開啟。

所有這些屬性都由物件支援 BindableProperty 。 此 Time 內容的預設繫結模式 BindingMode.TwoWay為 。

其他活動:

  • OpenedClosed 事件指出何時顯示或關閉平台時間選擇器 UI。

備註

TimePicker不包含能指出新選取Time值的事件。 如果您需要收到此通知,您可以為PropertyChanged事件新增事件處理程式。

此外, TimePicker 定義 TimeSelected 事件,這會在選取的時間變更時引發。 事件 TimeChangedEventArgs 隨附 TimeSelected 的物件具有 NewTimeOldTime 屬性,分別指定新舊時間。

建立時間選擇器 (TimePicker)

Time在 XAML 中指定 屬性時,值會轉換成 TimeSpan 並經過驗證,以確保毫秒數大於或等於 0,且時數小於 24。 時間元件應該以冒號分隔:

<TimePicker Time="4:15:26" />

下列螢幕快照顯示 iOS 上產生的 TimePicker

iOS 上 TimePicker 控件的螢幕快照。

如果將BindingContextTimePicker屬性設定為具有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 和佈局

您可以使用不受限制的水平版面設定選項, 例如 CenterStartEnd 搭配 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 並不總是能在所有情境下強制下拉選單打開。 建議以使用者互動來開啟;若失焦則會關閉。

要偵測選擇器何時開啟或關閉,處理 FocusedUnfocused 事件。