From bfd7f0c44eacc78829764a276b7d8632793fc7f1 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Sun, 28 Apr 2024 18:13:20 +0800 Subject: [PATCH] feat: add button interaction. --- .../DateTimePicker/TimeRangePicker.cs | 75 ++++++++++++------- 1 file changed, 46 insertions(+), 29 deletions(-) diff --git a/src/Ursa/Controls/DateTimePicker/TimeRangePicker.cs b/src/Ursa/Controls/DateTimePicker/TimeRangePicker.cs index 5b5986e..2fcb486 100644 --- a/src/Ursa/Controls/DateTimePicker/TimeRangePicker.cs +++ b/src/Ursa/Controls/DateTimePicker/TimeRangePicker.cs @@ -37,14 +37,9 @@ public class TimeRangePicker : TimePickerBase, IClearControl AvaloniaProperty.Register( nameof(StartWatermark)); - public static readonly StyledProperty EndWatermarkProperty = AvaloniaProperty.Register( - nameof(EndWatermark)); - - public string? EndWatermark - { - get => GetValue(EndWatermarkProperty); - set => SetValue(EndWatermarkProperty, value); - } + public static readonly StyledProperty EndWatermarkProperty = + AvaloniaProperty.Register( + nameof(EndWatermark)); private Button? _button; private TimePickerPresenter? _endPresenter; @@ -58,24 +53,15 @@ public class TimeRangePicker : TimePickerBase, IClearControl static TimeRangePicker() { StartTimeProperty.Changed.AddClassHandler((picker, args) => - picker.OnSelectionChanged(args, true)); + picker.OnSelectionChanged(args)); EndTimeProperty.Changed.AddClassHandler((picker, args) => picker.OnSelectionChanged(args, false)); } - private void OnSelectionChanged(AvaloniaPropertyChangedEventArgs args, bool start = true) + public string? EndWatermark { - var textBox = start ? _startTextBox : _endTextBox; - if (textBox is null) return; - var time = args.NewValue.Value; - if (time is null) - { - textBox.Text = null; - return; - } - var date = new DateTime(1, 1, 1, time.Value.Hours, time.Value.Minutes, time.Value.Seconds); - var text = date.ToString(DisplayFormat); - textBox.Text = text; + get => GetValue(EndWatermarkProperty); + set => SetValue(EndWatermarkProperty, value); } public string? StartWatermark @@ -103,22 +89,47 @@ public class TimeRangePicker : TimePickerBase, IClearControl _endPresenter?.SetValue(TimePickerPresenter.TimeProperty, null); } + private void OnSelectionChanged(AvaloniaPropertyChangedEventArgs args, bool start = true) + { + var textBox = start ? _startTextBox : _endTextBox; + if (textBox is null) return; + var time = args.NewValue.Value; + if (time is null) + { + textBox.Text = null; + return; + } + + var date = new DateTime(1, 1, 1, time.Value.Hours, time.Value.Minutes, time.Value.Seconds); + var text = date.ToString(DisplayFormat); + textBox.Text = text; + } + protected override void OnApplyTemplate(TemplateAppliedEventArgs e) { base.OnApplyTemplate(e); - + GotFocusEvent.RemoveHandler(OnTextBoxGetFocus, _startTextBox, _endTextBox); PointerPressedEvent.RemoveHandler(OnTextBoxPointerPressed, _startTextBox, _endTextBox); - + Button.ClickEvent.RemoveHandler(OnButtonClick, _button); + _popup = e.NameScope.Find(PartNames.PART_Popup); _startTextBox = e.NameScope.Find(PART_StartTextBox); _endTextBox = e.NameScope.Find(PART_EndTextBox); _startPresenter = e.NameScope.Find(PART_StartPresenter); _endPresenter = e.NameScope.Find(PART_EndPresenter); _button = e.NameScope.Find