diff --git a/demo/Ursa.Demo/Pages/TimePickerDemo.axaml b/demo/Ursa.Demo/Pages/TimePickerDemo.axaml
index 3e1b4c9..7a8c8bf 100644
--- a/demo/Ursa.Demo/Pages/TimePickerDemo.axaml
+++ b/demo/Ursa.Demo/Pages/TimePickerDemo.axaml
@@ -11,21 +11,36 @@
+
+
+ PanelFormat="{Binding #panelFormat.Text}" />
+
-
+ InnerRightContent="截止"
+ NeedConfirmation="True"
+ PanelFormat="{Binding #panelFormat.Text}" />
+
diff --git a/src/Ursa.Themes.Semi/Controls/TimeRangePicker.axaml b/src/Ursa.Themes.Semi/Controls/TimeRangePicker.axaml
index bc67c4e..b95972e 100644
--- a/src/Ursa.Themes.Semi/Controls/TimeRangePicker.axaml
+++ b/src/Ursa.Themes.Semi/Controls/TimeRangePicker.axaml
@@ -25,7 +25,7 @@
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding CornerRadius}" />
-
+
((picker, args) =>
picker.OnSelectionChanged(args));
+ DisplayFormatProperty.Changed.AddClassHandler((picker, args) => picker.OnDisplayFormatChanged(args));
+ }
+
+ private void OnDisplayFormatChanged(AvaloniaPropertyChangedEventArgs args)
+ {
+ if (_textBox is null) return;
+ var time = SelectedTime;
+ var date = new DateTime( 1, 1, 1, time.Value.Hours, time.Value.Minutes, time.Value.Seconds);
+ var text = date.ToString(DisplayFormat);
+ _textBox.Text = text;
}
public string? Watermark
diff --git a/src/Ursa/Controls/DateTimePicker/TimePickerPresenter.cs b/src/Ursa/Controls/DateTimePicker/TimePickerPresenter.cs
index dedf751..044c2f6 100644
--- a/src/Ursa/Controls/DateTimePicker/TimePickerPresenter.cs
+++ b/src/Ursa/Controls/DateTimePicker/TimePickerPresenter.cs
@@ -130,42 +130,49 @@ public class TimePickerPresenter : TemplatedControl
private void OnPanelFormatChanged(AvaloniaPropertyChangedEventArgs args)
{
var format = args.NewValue.Value;
-
UpdatePanelLayout(format);
}
- private void UpdatePanelLayout(string panelFormat)
+ private void UpdatePanelLayout(string? panelFormat)
{
+ if (panelFormat is null) return;
var parts = panelFormat.Split(new[] { ' ', '-', ':' }, StringSplitOptions.RemoveEmptyEntries);
var panels = new List();
foreach (var part in parts)
{
if (part.Length < 1) continue;
- if ((part.Contains('h') || part.Contains('H')) && !panels.Contains(_hourScrollPanel))
+ try
{
- panels.Add(_hourScrollPanel);
- _use12Clock = part.Contains('h');
- _hourSelector?.SetValue(DateTimePickerPanel.ItemFormatProperty, part.ToLower());
- if (_hourSelector is not null)
+ if ((part.Contains('h') || part.Contains('H')) && !panels.Contains(_hourScrollPanel))
{
- _hourSelector.MaximumValue = _use12Clock ? 12 : 23;
- _hourSelector.MinimumValue = _use12Clock ? 1: 0;
+ panels.Add(_hourScrollPanel);
+ _use12Clock = part.Contains('h');
+ _hourSelector?.SetValue(DateTimePickerPanel.ItemFormatProperty, part.ToLower());
+ if (_hourSelector is not null)
+ {
+ _hourSelector.MaximumValue = _use12Clock ? 12 : 23;
+ _hourSelector.MinimumValue = _use12Clock ? 1 : 0;
+ }
+ }
+ else if (part[0] == 'm' && !panels.Contains(_minuteSelector))
+ {
+ panels.Add(_minuteScrollPanel);
+ _minuteSelector?.SetValue(DateTimePickerPanel.ItemFormatProperty, part);
+ }
+ else if (part[0] == 's' && !panels.Contains(_secondScrollPanel))
+ {
+ panels.Add(_secondScrollPanel);
+ _secondSelector?.SetValue(DateTimePickerPanel.ItemFormatProperty, part.Replace('s', 'm'));
+ }
+ else if (part[0] == 't' && !panels.Contains(_ampmScrollPanel))
+ {
+ panels.Add(_ampmScrollPanel);
+ _ampmSelector?.SetValue(DateTimePickerPanel.ItemFormatProperty, part);
}
}
- else if (part[0] == 'm' && !panels.Contains(_minuteSelector))
+ catch
{
- panels.Add(_minuteScrollPanel);
- _minuteSelector?.SetValue(DateTimePickerPanel.ItemFormatProperty, part);
- }
- else if (part[0] == 's' && !panels.Contains(_secondScrollPanel))
- {
- panels.Add(_secondScrollPanel);
- _secondSelector?.SetValue(DateTimePickerPanel.ItemFormatProperty, part.Replace('s', 'm'));
- }
- else if (part[0] == 't' && !panels.Contains(_ampmScrollPanel))
- {
- panels.Add(_ampmScrollPanel);
- _ampmSelector?.SetValue(DateTimePickerPanel.ItemFormatProperty, part);
+
}
}