From a888ca3709ee6adf4d42b8aaeda484968c3ddca6 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Sat, 19 Mar 2022 23:44:05 -0400 Subject: [PATCH] Merge pull request #7834 from AvaloniaUI/fixes/touch-date-time-pickers fix using touch for date/time pickers. --- .../DateTimePickers/DateTimePickerPanel.cs | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs b/src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs index e16e609a15..3c7efeb29d 100644 --- a/src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs +++ b/src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs @@ -2,6 +2,8 @@ using System.Globalization; using System.Linq; using Avalonia.Input; +using Avalonia.Interactivity; +using Avalonia.Media; using Avalonia.VisualTree; namespace Avalonia.Controls.Primitives @@ -58,18 +60,17 @@ namespace Avalonia.Controls.Primitives private Vector _offset; private bool _hasInit; private bool _suppressUpdateOffset; - private ListBoxItem _pressedItem; public DateTimePickerPanel() { FormatDate = DateTime.Now; - AddHandler(ListBoxItem.PointerPressedEvent, OnItemPointerDown, Avalonia.Interactivity.RoutingStrategies.Bubble); - AddHandler(ListBoxItem.PointerReleasedEvent, OnItemPointerUp, Avalonia.Interactivity.RoutingStrategies.Bubble); + AddHandler(TappedEvent, OnItemTapped, RoutingStrategies.Bubble); } static DateTimePickerPanel() { FocusableProperty.OverrideDefaultValue(true); + BackgroundProperty.OverrideDefaultValue(Brushes.Transparent); AffectsMeasure(ItemHeightProperty); } @@ -523,22 +524,13 @@ namespace Avalonia.Controls.Primitives return newValue; } - private void OnItemPointerDown(object sender, PointerPressedEventArgs e) + private void OnItemTapped(object sender, TappedEventArgs e) { - if (e.GetCurrentPoint(this).Properties.IsLeftButtonPressed) + if (e.Source is IVisual source && + GetItemFromSource(source) is ListBoxItem listBoxItem && + listBoxItem.Tag is int tag) { - _pressedItem = GetItemFromSource((IVisual)e.Source); - e.Handled = true; - } - } - - private void OnItemPointerUp(object sender, PointerReleasedEventArgs e) - { - if (e.GetCurrentPoint(this).Properties.PointerUpdateKind == PointerUpdateKind.LeftButtonReleased && - _pressedItem != null) - { - SelectedValue = (int)GetItemFromSource((IVisual)e.Source).Tag; - _pressedItem = null; + SelectedValue = tag; e.Handled = true; } }