diff options
Diffstat (limited to 'Xamarin.Forms.Platform.WinRT/ListViewRenderer.cs')
-rw-r--r-- | Xamarin.Forms.Platform.WinRT/ListViewRenderer.cs | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/Xamarin.Forms.Platform.WinRT/ListViewRenderer.cs b/Xamarin.Forms.Platform.WinRT/ListViewRenderer.cs index 031e2cf3..db581d52 100644 --- a/Xamarin.Forms.Platform.WinRT/ListViewRenderer.cs +++ b/Xamarin.Forms.Platform.WinRT/ListViewRenderer.cs @@ -77,6 +77,9 @@ namespace Xamarin.Forms.Platform.WinRT // and prevented from bubbling up) rather than ListView.ItemClick List.Tapped += ListOnTapped; + // We also want to watch for the Enter key being pressed for selection + List.KeyUp += OnKeyPressed; + List.SelectionChanged += OnControlSelectionChanged; List.SetBinding(ItemsControl.ItemsSourceProperty, ""); @@ -138,6 +141,7 @@ namespace Xamarin.Forms.Platform.WinRT if (List != null) { List.Tapped -= ListOnTapped; + List.KeyUp -= OnKeyPressed; List.SelectionChanged -= OnControlSelectionChanged; @@ -504,6 +508,17 @@ namespace Xamarin.Forms.Platform.WinRT #endif } + void OnKeyPressed(object sender, KeyRoutedEventArgs e) + { + if (e.Key == VirtualKey.Enter) + { + if (Element.SelectedItem != null && Element.SelectedItem != List.SelectedItem) + { + ((IElementController)Element).SetValueFromRenderer(ListView.SelectedItemProperty, List.SelectedItem); + } + } + } + void OnControlSelectionChanged(object sender, SelectionChangedEventArgs e) { RestorePreviousSelectedVisual(); @@ -525,10 +540,6 @@ namespace Xamarin.Forms.Platform.WinRT } } #endif - - // A11y: Tapped event will not be routed when Narrator is active - // Also handles keyboard selection - SelectElementItem(); } FrameworkElement FindElement(object cell) @@ -542,15 +553,6 @@ namespace Xamarin.Forms.Platform.WinRT return null; } - void SelectElementItem() - { - if (List.SelectedItem != null && Element.SelectedItem != List.SelectedItem) - { - ((IElementController)Element).SetValueFromRenderer(ListView.SelectedItemProperty, List?.SelectedItem); - OnElementItemSelected(null, new SelectedItemChangedEventArgs(Element?.SelectedItem)); - } - } - #if WINDOWS_UWP void RestorePreviousSelectedVisual() { |