diff --git a/demo/Ursa.Demo/Pages/TimePickerDemo.axaml b/demo/Ursa.Demo/Pages/TimePickerDemo.axaml
index 219e8e1..3e1b4c9 100644
--- a/demo/Ursa.Demo/Pages/TimePickerDemo.axaml
+++ b/demo/Ursa.Demo/Pages/TimePickerDemo.axaml
@@ -26,5 +26,6 @@
NeedConfirmation="True"
InnerLeftContent="时刻"
InnerRightContent="截止" />
+
diff --git a/src/Ursa.Themes.Semi/Controls/TimeRangePicker.axaml b/src/Ursa.Themes.Semi/Controls/TimeRangePicker.axaml
new file mode 100644
index 0000000..692ea2a
--- /dev/null
+++ b/src/Ursa.Themes.Semi/Controls/TimeRangePicker.axaml
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Ursa.Themes.Semi/Controls/_index.axaml b/src/Ursa.Themes.Semi/Controls/_index.axaml
index 390ddc3..bf6acad 100644
--- a/src/Ursa.Themes.Semi/Controls/_index.axaml
+++ b/src/Ursa.Themes.Semi/Controls/_index.axaml
@@ -34,6 +34,7 @@
+
diff --git a/src/Ursa/Controls/DateTimePicker/TimePicker.cs b/src/Ursa/Controls/DateTimePicker/TimePicker.cs
index 4f9aa2f..264461a 100644
--- a/src/Ursa/Controls/DateTimePicker/TimePicker.cs
+++ b/src/Ursa/Controls/DateTimePicker/TimePicker.cs
@@ -16,52 +16,19 @@ namespace Ursa.Controls;
[TemplatePart(PartNames.PART_Popup, typeof(Popup))]
[TemplatePart(PART_Presenter, typeof(TimePickerPresenter))]
[TemplatePart(PART_Button, typeof(Button))]
-public class TimePicker : TemplatedControl, IClearControl, IInnerContentControl, IPopupInnerContent
+public class TimePicker : TimePickerBase, IClearControl
{
public const string PART_TextBox = "PART_TextBox";
public const string PART_Presenter = "PART_Presenter";
public const string PART_Button = "PART_Button";
- public static readonly StyledProperty DisplayFormatProperty =
- AvaloniaProperty.Register(
- nameof(DisplayFormat), "HH:mm:ss");
-
- public static readonly StyledProperty PanelFormatProperty = AvaloniaProperty.Register(
- nameof(PanelFormat), "HH mm ss");
-
public static readonly StyledProperty SelectedTimeProperty =
AvaloniaProperty.Register(
nameof(SelectedTime));
- public static readonly StyledProperty NeedConfirmationProperty = AvaloniaProperty.Register(
- nameof(NeedConfirmation));
-
- public static readonly StyledProperty