Browse Source

Merge pull request #7834 from AvaloniaUI/fixes/touch-date-time-pickers

fix using touch for date/time pickers.
tmp-2
Max Katz 5 years ago
committed by Steven Kirk
parent
commit
a888ca3709
  1. 26
      src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs

26
src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs

@ -2,6 +2,8 @@
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
using Avalonia.Input; using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Media;
using Avalonia.VisualTree; using Avalonia.VisualTree;
namespace Avalonia.Controls.Primitives namespace Avalonia.Controls.Primitives
@ -58,18 +60,17 @@ namespace Avalonia.Controls.Primitives
private Vector _offset; private Vector _offset;
private bool _hasInit; private bool _hasInit;
private bool _suppressUpdateOffset; private bool _suppressUpdateOffset;
private ListBoxItem _pressedItem;
public DateTimePickerPanel() public DateTimePickerPanel()
{ {
FormatDate = DateTime.Now; FormatDate = DateTime.Now;
AddHandler(ListBoxItem.PointerPressedEvent, OnItemPointerDown, Avalonia.Interactivity.RoutingStrategies.Bubble); AddHandler(TappedEvent, OnItemTapped, RoutingStrategies.Bubble);
AddHandler(ListBoxItem.PointerReleasedEvent, OnItemPointerUp, Avalonia.Interactivity.RoutingStrategies.Bubble);
} }
static DateTimePickerPanel() static DateTimePickerPanel()
{ {
FocusableProperty.OverrideDefaultValue<DateTimePickerPanel>(true); FocusableProperty.OverrideDefaultValue<DateTimePickerPanel>(true);
BackgroundProperty.OverrideDefaultValue<DateTimePickerPanel>(Brushes.Transparent);
AffectsMeasure<DateTimePickerPanel>(ItemHeightProperty); AffectsMeasure<DateTimePickerPanel>(ItemHeightProperty);
} }
@ -523,22 +524,13 @@ namespace Avalonia.Controls.Primitives
return newValue; 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); SelectedValue = tag;
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;
e.Handled = true; e.Handled = true;
} }
} }

Loading…
Cancel
Save