diff --git a/src/TableView.cs b/src/TableView.cs
index e21a6d3e..820ee410 100644
--- a/src/TableView.cs
+++ b/src/TableView.cs
@@ -133,7 +133,7 @@ protected override DependencyObject GetContainerForItemOverride()
}
///
- protected override async void OnKeyDown(KeyRoutedEventArgs e)
+ protected override void OnKeyDown(KeyRoutedEventArgs e)
{
var shiftKey = KeyboardHelper.IsShiftKeyDown();
var ctrlKey = KeyboardHelper.IsCtrlKeyDown();
@@ -144,19 +144,19 @@ protected override async void OnKeyDown(KeyRoutedEventArgs e)
return;
}
- await HandleNavigations(e, shiftKey, ctrlKey);
+ HandleNavigations(e, shiftKey, ctrlKey);
}
///
/// Handles navigation keys.
///
- private async Task HandleNavigations(KeyRoutedEventArgs e, bool shiftKey, bool ctrlKey)
+ private void HandleNavigations(KeyRoutedEventArgs e, bool shiftKey, bool ctrlKey)
{
var currentCell = CurrentCellSlot.HasValue ? GetCellFromSlot(CurrentCellSlot.Value) : default;
if (e.Key is VirtualKey.F2 && currentCell is { IsReadOnly: false } && !IsEditing)
{
- e.Handled = await currentCell.BeginCellEditing(e);
+ e.Handled = currentCell.BeginCellEditing(e);
}
else if (e.Key is VirtualKey.Escape && currentCell is not null && IsEditing)
{
@@ -192,7 +192,7 @@ private async Task HandleNavigations(KeyRoutedEventArgs e, bool shiftKey, bool c
{
if (!EndCellEditing(TableViewEditAction.Commit, currentCell)) return;
- if (CurrentCellSlot == newSlot || GetCellFromSlot(newSlot) is not { } nextCell || !await nextCell.BeginCellEditing(e))
+ if (CurrentCellSlot == newSlot || GetCellFromSlot(newSlot) is not { } nextCell || !nextCell.BeginCellEditing(e))
{
SetIsEditing(false);
}
@@ -283,7 +283,7 @@ protected async override void OnApplyTemplate()
_scrollViewer = GetTemplateChild("ScrollViewer") as ScrollViewer;
_headerRowDefinition = GetTemplateChild("HeaderRowDefinition") as RowDefinition;
if (_scrollViewer is not null) _scrollViewer.Loaded += OnScrollViewerLoaded;
-
+
if (IsLoaded)
{
while (ItemsPanelRoot is null) await Task.Yield();
@@ -320,12 +320,12 @@ private void OnScrollViewerLoaded(object sender, RoutedEventArgs e)
Source = this
});
}
-
+
///
/// Handles the Loaded event of the TableView control.
///
private void OnLoaded(object sender, RoutedEventArgs e)
- {
+ {
EnsureAutoColumns();
}
diff --git a/src/TableViewCell.cs b/src/TableViewCell.cs
index 758c3b14..097210f1 100644
--- a/src/TableViewCell.cs
+++ b/src/TableViewCell.cs
@@ -210,18 +210,14 @@ protected override void OnPointerExited(PointerRoutedEventArgs e)
}
///
- protected override async void OnTapped(TappedRoutedEventArgs e)
+ protected override void OnTapped(TappedRoutedEventArgs e)
{
base.OnTapped(e);
- if ((TableView?.IsEditing ?? false) &&
- TableView.CurrentCellSlot != Slot &&
- TableView.CurrentCellSlot.HasValue &&
- TableView.GetCellFromSlot(TableView.CurrentCellSlot.Value) is { } currentCell)
+ if (TryEndCurrentCellEdit())
{
- e.Handled = !TableView.EndCellEditing(TableViewEditAction.Commit, currentCell);
-
- if (e.Handled) return;
+ e.Handled = true;
+ return;
}
if (TableView?.CurrentCellSlot != Slot || TableView?.LastSelectionUnit is TableViewSelectionUnit.Row)
@@ -236,9 +232,15 @@ protected override void OnPointerPressed(PointerRoutedEventArgs e)
{
base.OnPointerPressed(e);
+ if (TryEndCurrentCellEdit())
+ {
+ e.Handled = true;
+ return;
+ }
+
if (!KeyboardHelper.IsShiftKeyDown() && TableView is not null)
{
- TableView.SelectionStartCellSlot = TableView.SelectionUnit is not TableViewSelectionUnit.Row || !IsReadOnly ? Slot : default; ;
+ TableView.SelectionStartCellSlot = TableView.SelectionUnit is not TableViewSelectionUnit.Row || !IsReadOnly ? Slot : default;
TableView.SelectionStartRowIndex = Index;
CapturePointer(e.Pointer);
}
@@ -278,6 +280,19 @@ protected override void OnManipulationDelta(ManipulationDeltaRoutedEventArgs e)
}
}
+ private bool TryEndCurrentCellEdit()
+ {
+ if ((TableView?.IsEditing ?? false) &&
+ TableView.CurrentCellSlot != Slot &&
+ TableView.CurrentCellSlot.HasValue &&
+ TableView.GetCellFromSlot(TableView.CurrentCellSlot.Value) is { } currentCell)
+ {
+ return !TableView.EndCellEditing(TableViewEditAction.Commit, currentCell);
+ }
+
+ return false;
+ }
+
///
/// Gets the height of the horizontal gridlines/>.
///
@@ -309,7 +324,7 @@ private double GetHorizontalGridlineHeight()
}
///
- protected override async void OnDoubleTapped(DoubleTappedRoutedEventArgs e)
+ protected override void OnDoubleTapped(DoubleTappedRoutedEventArgs e)
{
var eventArgs = new TableViewCellDoubleTappedEventArgs(Slot, this, Row?.Content);
TableView?.OnCellDoubleTapped(eventArgs);
@@ -321,7 +336,7 @@ protected override async void OnDoubleTapped(DoubleTappedRoutedEventArgs e)
if (!IsReadOnly && TableView is not null && !TableView.IsEditing && !Column?.UseSingleElement is true)
{
- e.Handled = await BeginCellEditing(e);
+ e.Handled = BeginCellEditing(e);
}
else
{
@@ -370,7 +385,7 @@ private void MakeSelection()
/// The event data associated with the editing request. Cannot be null.
/// A task that represents the asynchronous operation. The task result is if cell editing was
/// successfully started; otherwise, if the operation was canceled.
- internal async Task BeginCellEditing(RoutedEventArgs editingArgs)
+ internal bool BeginCellEditing(RoutedEventArgs editingArgs)
{
var args = new TableViewBeginningEditEventArgs(this, Row?.Content, Column!, editingArgs);
TableView?.OnBeginningEdit(args);