Files
AtomUI/docs/Desktop.Controls/DatePicker/DatePickerUsage.md
T

13 KiB
Raw Blame History

DatePicker 使用文档

本文档介绍 AtomUI DatePicker 和 RangeDatePicker 控件的各种使用方式,示例代码摘自 Gallery 演示程序。

📖 Gallery 源码位置:controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/DatePickerShowCase.axaml


前置准备

在 AXAML 中使用 DatePicker,需要引入以下命名空间:

xmlns:atom="https://atomui.net"

在 C# 代码中引入:

using AtomUI.Desktop.Controls;   // DatePicker, RangeDatePicker 控件
using AtomUI.Controls;            // SizeType 等共享类型

1. 基本用法

最简单的日期选择器,点击弹出日历面板,选择日期后自动回填。

<atom:DatePicker PlaceholderText="Select date" />

默认行为:

  • 显示格式:yyyy-MM-dd
  • 选择后立即确认(无需点击确认按钮)
  • 左侧显示日历图标

2. 范围日期选择

使用 RangeDatePicker 选择一个日期范围,提供双输入框 + 箭头分隔符。

<atom:RangeDatePicker PlaceholderText="Select date"
                      SecondaryPlaceholderText="End date" />

默认行为:

  • 点击左侧输入框选择起始日期
  • 选择后自动切换到右侧输入框选择结束日期
  • 不显示时间时使用双月日历面板

3. 确认模式

通过 IsNeedConfirm 属性启用手动确认,选择日期后需点击「确定」按钮才会提交。

<!-- 单日期选择 + 确认按钮 -->
<atom:DatePicker IsNeedConfirm="True" PlaceholderText="Select date" />

<!-- 范围选择 + 确认按钮 -->
<atom:RangeDatePicker IsNeedConfirm="True"
                      IsShowTime="False"
                      PlaceholderText="Select date"
                      SecondaryPlaceholderText="End date" />

4. 日期+时间选择

通过 IsShowTime="True" 开启时间选择,日历面板右侧将附加时间选择器。

<!-- 单日期+时间选择 -->
<atom:DatePicker IsNeedConfirm="True"
                 IsShowTime="True"
                 PlaceholderText="Select date" />

<!-- 范围+时间选择 -->
<atom:RangeDatePicker IsNeedConfirm="True"
                      IsShowTime="True"
                      PlaceholderText="Select date"
                      SecondaryPlaceholderText="End date" />

注意:开启 IsShowTime 后:

  • 显示格式自动扩展为 yyyy-MM-dd HH:mm:ss
  • 确认模式自动开启(IsNeedConfirm 被强制设为 true)
  • 底部快捷按钮从「今天」变为「现在」

5. 12 小时制

通过 ClockIdentifier 属性切换 12/24 小时制:

<atom:RangeDatePicker StyleVariant="Outline"
                      Status="Default"
                      PlaceholderText="Start date"
                      SecondaryPlaceholderText="End date"
                      IsNeedConfirm="True"
                      ClockIdentifier="HourClock24" />

6. 禁用状态

通过 IsEnabled="False" 禁用日期选择器:

<!-- 禁用的单日期选择器(带预选值) -->
<atom:DatePicker IsNeedConfirm="True"
                 PlaceholderText="Select date"
                 SelectedDateTime="2024-01-20"
                 IsEnabled="False" />

<!-- 禁用的时间日期选择器 -->
<atom:DatePicker IsNeedConfirm="True"
                 PlaceholderText="Select date"
                 IsShowTime="True"
                 SelectedDateTime="2024-01-20 12:22:23 AM"
                 IsEnabled="False" />

<!-- 禁用的范围选择器 -->
<atom:RangeDatePicker IsNeedConfirm="True"
                      PlaceholderText="Select date"
                      SecondaryPlaceholderText="End date"
                      RangeStartDefaultDate="2024-01-20"
                      RangeEndDefaultDate="2024-03-20"
                      IsEnabled="False" />

<!-- 禁用的范围+时间选择器 -->
<atom:RangeDatePicker IsNeedConfirm="True"
                      PlaceholderText="Select date"
                      SecondaryPlaceholderText="End date"
                      IsShowTime="True"
                      RangeStartDefaultDate="2024-01-20 12:22:23 AM"
                      RangeEndDefaultDate="2024-02-20 07:22:23 AM"
                      IsEnabled="False" />

7. 三种尺寸

通过 SizeType 属性设置尺寸,支持 Large、Middle(默认)、Small 三种。

<atom:DatePicker IsNeedConfirm="True"
                 PlaceholderText="Select date"
                 SelectedDateTime="2024-01-20"
                 SizeType="{Binding PickerSizeType}" />

<atom:RangeDatePicker IsNeedConfirm="True"
                      PlaceholderText="Select date"
                      SecondaryPlaceholderText="End date"
                      IsShowTime="True"
                      RangeStartDefaultDate="2024-01-20 12:22:23 AM"
                      RangeEndDefaultDate="2024-02-20 07:22:23 AM"
                      SizeType="{Binding PickerSizeType}" />

尺寸可通过数据绑定动态切换(参考 Gallery 中的 OptionButtonGroup 示例)。


8. 验证状态

通过 Status 属性设置验证状态,支持 Default、Warning、Error 三种:

<StackPanel Orientation="Vertical" Spacing="10">
    <!-- 默认状态 -->
    <StackPanel Orientation="Horizontal" Spacing="5">
        <atom:DatePicker Status="Default" PlaceholderText="Select time" />
        <atom:RangeDatePicker StyleVariant="Outline"
                              Status="Default"
                              PlaceholderText="Start date"
                              SecondaryPlaceholderText="End date"
                              IsNeedConfirm="True"
                              ClockIdentifier="HourClock24" />
    </StackPanel>
    
    <!-- 警告状态 -->
    <StackPanel Orientation="Horizontal" Spacing="5">
        <atom:DatePicker Status="Warning" PlaceholderText="Select time" />
        <atom:RangeDatePicker StyleVariant="Outline"
                              Status="Warning"
                              PlaceholderText="Start date"
                              SecondaryPlaceholderText="End date"
                              IsNeedConfirm="True"
                              ClockIdentifier="HourClock24" />
    </StackPanel>
    
    <!-- 错误状态 -->
    <StackPanel Orientation="Horizontal" Spacing="5">
        <atom:DatePicker Status="Error" PlaceholderText="Select time" />
        <atom:RangeDatePicker StyleVariant="Outline"
                              Status="Error"
                              PlaceholderText="Start date"
                              SecondaryPlaceholderText="End date"
                              IsNeedConfirm="True"
                              ClockIdentifier="HourClock24" />
    </StackPanel>
</StackPanel>

9. 样式变体

通过 StyleVariant 属性设置外观变体:

<StackPanel Orientation="Vertical" Spacing="10">
    <!-- Outline 轮廓样式(默认) -->
    <StackPanel Orientation="Horizontal" Spacing="5">
        <atom:DatePicker StyleVariant="Outline" PlaceholderText="Outline" />
        <atom:RangeDatePicker StyleVariant="Outline"
                              SecondaryPlaceholderText="End date"
                              IsNeedConfirm="True"
                              PlaceholderText="Outline" />
    </StackPanel>
    
    <!-- Filled 填充样式 -->
    <StackPanel Orientation="Horizontal" Spacing="5">
        <atom:DatePicker StyleVariant="Filled" PlaceholderText="Filled" />
        <atom:RangeDatePicker StyleVariant="Filled"
                              SecondaryPlaceholderText="End date"
                              IsNeedConfirm="True"
                              PlaceholderText="Filled" />
    </StackPanel>
    
    <!-- Filled + Error 状态组合 -->
    <StackPanel Orientation="Horizontal" Spacing="5">
        <atom:DatePicker StyleVariant="Filled" Status="Error"
                         PlaceholderText="Filled" />
        <atom:RangeDatePicker StyleVariant="Filled" Status="Error"
                              SecondaryPlaceholderText="End date"
                              IsNeedConfirm="True"
                              PlaceholderText="Filled" />
    </StackPanel>
    
    <!-- Borderless 无边框样式 -->
    <StackPanel Orientation="Horizontal" Spacing="5">
        <atom:DatePicker StyleVariant="Borderless" PlaceholderText="Borderless" />
        <atom:RangeDatePicker StyleVariant="Borderless"
                              SecondaryPlaceholderText="End date"
                              IsNeedConfirm="True"
                              PlaceholderText="Borderless" />
    </StackPanel>
</StackPanel>

10. 弹出方向

通过 PickerPlacement 属性控制日历面板弹出方向:

<atom:DatePicker IsNeedConfirm="True"
                 PlaceholderText="Select date"
                 SelectedDateTime="2024-01-20"
                 PickerPlacement="{Binding PickerPlacement}" />

<atom:RangeDatePicker IsNeedConfirm="True"
                      PlaceholderText="Select date"
                      IsShowTime="True"
                      RangeStartDefaultDate="2024-01-20 12:22:23 AM"
                      RangeEndDefaultDate="2024-02-20 07:22:23 AM"
                      PickerPlacement="{Binding PickerPlacement}" />

支持的弹出方向:TopLeft、TopRight、BottomLeft(默认)、BottomRight。


11. 默认值

通过 DefaultDateTime(单日期)或 RangeStartDefaultDate / RangeEndDefaultDate(范围)设置默认值:

<!-- 单日期默认值 -->
<atom:DatePicker DefaultDateTime="2024-01-20"
                 PlaceholderText="Select date" />

<!-- 范围默认值 -->
<atom:RangeDatePicker RangeStartDefaultDate="2024-01-20"
                      RangeEndDefaultDate="2024-03-20"
                      PlaceholderText="Start date"
                      SecondaryPlaceholderText="End date" />

<!-- 范围+时间默认值 -->
<atom:RangeDatePicker IsShowTime="True"
                      RangeStartDefaultDate="2024-01-20 12:22:23 AM"
                      RangeEndDefaultDate="2024-02-20 07:22:23 AM"
                      PlaceholderText="Start date"
                      SecondaryPlaceholderText="End date" />

12. MVVM 数据绑定

DatePicker 完整支持双向数据绑定:

<!-- 单日期绑定 -->
<atom:DatePicker SelectedDateTime="{Binding SelectedDate}"
                 PlaceholderText="Select date" />

<!-- 范围绑定 -->
<atom:RangeDatePicker RangeStartSelectedDate="{Binding StartDate}"
                      RangeEndSelectedDate="{Binding EndDate}"
                      PlaceholderText="Start date"
                      SecondaryPlaceholderText="End date" />
// ViewModel(使用 ReactiveUI)
public class DatePickerViewModel : ReactiveObject
{
    [Reactive]
    public DateTime? SelectedDate { get; set; }

    [Reactive]
    public DateTime? StartDate { get; set; }

    [Reactive]
    public DateTime? EndDate { get; set; }
}

13. 程序化控制

在 code-behind 中操作 DatePicker:

// 清除选中值
datePicker.Clear();

// 重置为默认值
datePicker.Reset();

// 设置选中日期
datePicker.SelectedDateTime = new DateTime(2024, 6, 15);

// 范围选择器
rangeDatePicker.RangeStartSelectedDate = new DateTime(2024, 1, 1);
rangeDatePicker.RangeEndSelectedDate = new DateTime(2024, 12, 31);

// 清除范围
rangeDatePicker.Clear();

// 重置为默认范围
rangeDatePicker.Reset();

14. 紧凑空间中使用

在 Space.Compact 容器中,DatePicker 会自动调整边框和圆角:

<atom:Space Compact="True">
    <atom:DatePicker atom:CompactSpace.ItemSize="5*" />
    <atom:Button ButtonType="Primary">查询</atom:Button>
    <atom:RangeDatePicker atom:CompactSpace.ItemSize="7*" />
</atom:Space>

📖 参考:controlgallery/AtomUIGallery/ShowCases/Views/Layout/SpaceShowCase.axaml


常见组合模式

日期筛选栏

<StackPanel Orientation="Horizontal" Spacing="8">
    <atom:DatePicker PlaceholderText="Start date" SizeType="Small" />
    <atom:TextBlock VerticalAlignment="Center">至</atom:TextBlock>
    <atom:DatePicker PlaceholderText="End date" SizeType="Small" />
    <atom:Button ButtonType="Primary" SizeType="Small">查询</atom:Button>
</StackPanel>

范围日期+确认

<atom:RangeDatePicker IsNeedConfirm="True"
                      PlaceholderText="开始日期"
                      SecondaryPlaceholderText="结束日期" />

日期时间精确选择

<atom:DatePicker IsShowTime="True"
                 IsNeedConfirm="True"
                 PlaceholderText="选择日期和时间" />

表单中使用

<atom:FormItem Label="出生日期" IsRequired="True">
    <atom:DatePicker PlaceholderText="请选择出生日期" />
</atom:FormItem>

<atom:FormItem Label="有效期" IsRequired="True">
    <atom:RangeDatePicker PlaceholderText="开始日期"
                          SecondaryPlaceholderText="结束日期" />
</atom:FormItem>