From c656c4fff62f6cd9dd8fb3098c96cff6b611eceb Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Fri, 18 Mar 2022 14:47:19 +0000 Subject: [PATCH 1/2] fix using touch for date/time pickers. --- .../DateTimePickers/DateTimePickerPanel.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs b/src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs index 5948d81810..cf032e1a00 100644 --- a/src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs +++ b/src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs @@ -2,6 +2,7 @@ using System.Globalization; using System.Linq; using Avalonia.Input; +using Avalonia.Media; using Avalonia.VisualTree; namespace Avalonia.Controls.Primitives @@ -63,13 +64,14 @@ namespace Avalonia.Controls.Primitives public DateTimePickerPanel() { FormatDate = DateTime.Now; - AddHandler(ListBoxItem.PointerPressedEvent, OnItemPointerDown, Avalonia.Interactivity.RoutingStrategies.Bubble); - AddHandler(ListBoxItem.PointerReleasedEvent, OnItemPointerUp, Avalonia.Interactivity.RoutingStrategies.Bubble); + AddHandler(PointerPressedEvent, OnItemPointerDown, Avalonia.Interactivity.RoutingStrategies.Bubble); + AddHandler(PointerReleasedEvent, OnItemPointerUp, Avalonia.Interactivity.RoutingStrategies.Bubble); } static DateTimePickerPanel() { FocusableProperty.OverrideDefaultValue(true); + BackgroundProperty.OverrideDefaultValue(Brushes.Transparent); AffectsMeasure(ItemHeightProperty); } @@ -529,7 +531,6 @@ namespace Avalonia.Controls.Primitives e.Source is IVisual source) { _pressedItem = GetItemFromSource(source); - e.Handled = true; } } @@ -543,7 +544,6 @@ namespace Avalonia.Controls.Primitives { SelectedValue = tag; _pressedItem = null; - e.Handled = true; } } From 86c68daa63468a6f789d24fe8558ce996f2168ae Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Fri, 18 Mar 2022 15:54:24 +0000 Subject: [PATCH 2/2] use tapped gesture instead of pointer events in date time picker. --- .../DateTimePickers/DateTimePickerPanel.cs | 26 +++++-------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs b/src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs index cf032e1a00..a923c44d05 100644 --- a/src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs +++ b/src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs @@ -2,6 +2,7 @@ using System.Globalization; using System.Linq; using Avalonia.Input; +using Avalonia.Interactivity; using Avalonia.Media; using Avalonia.VisualTree; @@ -59,13 +60,11 @@ namespace Avalonia.Controls.Primitives private Vector _offset; private bool _hasInit; private bool _suppressUpdateOffset; - private ListBoxItem? _pressedItem; public DateTimePickerPanel() { FormatDate = DateTime.Now; - AddHandler(PointerPressedEvent, OnItemPointerDown, Avalonia.Interactivity.RoutingStrategies.Bubble); - AddHandler(PointerReleasedEvent, OnItemPointerUp, Avalonia.Interactivity.RoutingStrategies.Bubble); + AddHandler(TappedEvent, OnItemTapped, RoutingStrategies.Bubble); } static DateTimePickerPanel() @@ -525,25 +524,14 @@ 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 && - e.Source is IVisual source) - { - _pressedItem = GetItemFromSource(source); - } - } - - private void OnItemPointerUp(object? sender, PointerReleasedEventArgs e) - { - if (e.GetCurrentPoint(this).Properties.PointerUpdateKind == PointerUpdateKind.LeftButtonReleased && - _pressedItem != null && - e.Source is IVisual source && - GetItemFromSource(source) is ListBoxItem item && - item.Tag is int tag) + if (e.Source is IVisual source && + GetItemFromSource(source) is ListBoxItem listBoxItem && + listBoxItem.Tag is int tag) { SelectedValue = tag; - _pressedItem = null; + e.Handled = true; } }