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); + } }