From 18e5996f73d6bc393e7e2c49f9a7d23ef598ff7b Mon Sep 17 00:00:00 2001 From: rabbitism Date: Thu, 16 May 2024 16:19:02 +0800 Subject: [PATCH 1/3] fix: make sure popup won't close when clicking on elements. --- src/Ursa.Themes.Semi/Controls/TimeRangePicker.axaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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}" /> - + Date: Thu, 16 May 2024 22:48:46 +0800 Subject: [PATCH 2/3] feat: make panel format nullable. Update display text on display format change. --- src/Ursa/Controls/DateTimePicker/TimePicker.cs | 10 ++++++++++ .../Controls/DateTimePicker/TimePickerPresenter.cs | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Ursa/Controls/DateTimePicker/TimePicker.cs b/src/Ursa/Controls/DateTimePicker/TimePicker.cs index 983e3d2..1383bac 100644 --- a/src/Ursa/Controls/DateTimePicker/TimePicker.cs +++ b/src/Ursa/Controls/DateTimePicker/TimePicker.cs @@ -39,6 +39,16 @@ public class TimePicker : TimePickerBase, IClearControl { SelectedTimeProperty.Changed.AddClassHandler((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..0f8db96 100644 --- a/src/Ursa/Controls/DateTimePicker/TimePickerPresenter.cs +++ b/src/Ursa/Controls/DateTimePicker/TimePickerPresenter.cs @@ -130,12 +130,12 @@ 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) From d19dd58f04237719e2035145095744502711248f Mon Sep 17 00:00:00 2001 From: rabbitism Date: Thu, 16 May 2024 23:03:28 +0800 Subject: [PATCH 3/3] fix: fix panel format change handling. --- demo/Ursa.Demo/Pages/TimePickerDemo.axaml | 29 +++++++++--- .../DateTimePicker/TimePickerPresenter.cs | 47 +++++++++++-------- 2 files changed, 49 insertions(+), 27 deletions(-) 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/Controls/DateTimePicker/TimePickerPresenter.cs b/src/Ursa/Controls/DateTimePicker/TimePickerPresenter.cs index 0f8db96..044c2f6 100644 --- a/src/Ursa/Controls/DateTimePicker/TimePickerPresenter.cs +++ b/src/Ursa/Controls/DateTimePicker/TimePickerPresenter.cs @@ -141,31 +141,38 @@ public class TimePickerPresenter : TemplatedControl 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); + } }