diff options
author | Samantha Houts <samantha.houts@xamarin.com> | 2017-09-26 10:34:35 -0700 |
---|---|---|
committer | Samantha Houts <samantha.houts@xamarin.com> | 2017-09-26 10:34:35 -0700 |
commit | 783ecfcde057f4d8920058410bcba3d1d353808e (patch) | |
tree | 0bee2840699a96d967f78396ed5a93918c993199 | |
parent | 78b8be17aa0f428df9d1440e0536027574741a2e (diff) | |
download | xamarin-forms-783ecfcde057f4d8920058410bcba3d1d353808e.tar.gz xamarin-forms-783ecfcde057f4d8920058410bcba3d1d353808e.tar.bz2 xamarin-forms-783ecfcde057f4d8920058410bcba3d1d353808e.zip |
Revert "[UWP] Use ItemClick to re-enable use of enter key for selection on ListView (#1133)"
This reverts commit d1bf93be200b3d3c48d0d292bf455f444485d8f9.
3 files changed, 38 insertions, 68 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla59248.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla59248.cs deleted file mode 100644 index 96a80296..00000000 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla59248.cs +++ /dev/null @@ -1,57 +0,0 @@ -using Xamarin.Forms.CustomAttributes; -using Xamarin.Forms.Internals; - -#if UITEST -using Xamarin.UITest; -using NUnit.Framework; -#endif - -namespace Xamarin.Forms.Controls.Issues -{ - [Preserve(AllMembers = true)] - [Issue(IssueTracker.Bugzilla, 59248, "[UWP] ItemTapped event is not fired when keyboard Enter Pressed on ListView", PlatformAffected.UWP)] - public class Bugzilla59248 : TestContentPage - { - protected override void Init() - { - var selectedItem = new Label { Text = "SelectedItem" }; - var list = new ListView - { - ItemsSource = new string[] { "A", "B", "C" }, - ItemTemplate = new DataTemplate(() => - { - var view = new ViewCell(); - view.View = new StackLayout - { - Children = - { - new Label { Text = "Label" }, - new Button { Text = "Click for alert", Command = new Command(() => DisplayAlert("Clicked the button in the listview item", "Ok", "Cancel"))} - } - }; - return view; - }) - }; - list.ItemTapped += List_ItemTapped; - list.ItemSelected += (s, e) => - { - selectedItem.Text = list.SelectedItem == null ? "None" : list.SelectedItem.ToString(); - }; - - Content = new StackLayout - { - Children = - { - list, - selectedItem - } - }; - } - - private void List_ItemTapped(object sender, ItemTappedEventArgs e) - { - if (e.Item != null) - DisplayAlert("Tapped: " + e.Item, "Ok", "Cancel"); - } - } -}
\ No newline at end of file diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index 4412acae..5055f958 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -218,7 +218,6 @@ <Compile Include="$(MSBuildThisFileDirectory)Bugzilla57910.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla58406.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla58833.cs" /> - <Compile Include="$(MSBuildThisFileDirectory)Bugzilla59248.cs" /> <Compile Include="$(MSBuildThisFileDirectory)ButtonBackgroundColorTest.cs" /> <Compile Include="$(MSBuildThisFileDirectory)CarouselAsync.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla34561.cs" /> diff --git a/Xamarin.Forms.Platform.WinRT/ListViewRenderer.cs b/Xamarin.Forms.Platform.WinRT/ListViewRenderer.cs index 33525bc1..0fb5af80 100644 --- a/Xamarin.Forms.Platform.WinRT/ListViewRenderer.cs +++ b/Xamarin.Forms.Platform.WinRT/ListViewRenderer.cs @@ -72,8 +72,10 @@ namespace Xamarin.Forms.Platform.WinRT GroupStyleSelector = (GroupStyleSelector)WApp.Current.Resources["ListViewGroupSelector"] }; - List.IsItemClickEnabled = true; - List.ItemClick += OnListItemClicked; + // In order to support tapping on elements within a list item, we handle + // ListView.Tapped (which can be handled by child elements in the list items + // and prevented from bubbling up) rather than ListView.ItemClick + List.Tapped += ListOnTapped; List.SelectionChanged += OnControlSelectionChanged; @@ -135,7 +137,8 @@ namespace Xamarin.Forms.Platform.WinRT { if (List != null) { - List.ItemClick -= OnListItemClicked; + List.Tapped -= ListOnTapped; + List.SelectionChanged -= OnControlSelectionChanged; List.DataContext = null; @@ -434,6 +437,32 @@ namespace Xamarin.Forms.Platform.WinRT List.SelectedIndex = index; } + void ListOnTapped(object sender, TappedRoutedEventArgs args) + { + var orig = args.OriginalSource as DependencyObject; + int index = -1; + + // Work our way up the tree until we find the actual list item + // the user tapped on + while (orig != null && orig != List) + { + var lv = orig as ListViewItem; + + if (lv != null) + { + index = TemplatedItemsView.TemplatedItems.GetGlobalIndexOfItem(lv.Content); + break; + } + + orig = VisualTreeHelper.GetParent(orig); + } + + if (index > -1) + { + OnListItemClicked(index); + } + } + void OnListItemClicked(int index) { #if !WINDOWS_UWP @@ -475,12 +504,6 @@ namespace Xamarin.Forms.Platform.WinRT #endif } - void OnListItemClicked(object sender, ItemClickEventArgs e) - { - if (e.ClickedItem != null) - OnListItemClicked(((WListView)e.OriginalSource).Items.IndexOf(e.ClickedItem)); - } - void OnControlSelectionChanged(object sender, SelectionChangedEventArgs e) { RestorePreviousSelectedVisual(); @@ -510,8 +533,13 @@ namespace Xamarin.Forms.Platform.WinRT } } #endif + + // A11y: Tapped event will not be routed when Narrator is active, so we need to handle it here. + // Also handles keyboard selection. + // Default UWP behavior is that items are selected when you navigate to them via the arrow keys + // and deselected with the space bar, so this will remain the same. if (Element.SelectedItem != List.SelectedItem) - ((IElementController)Element).SetValueFromRenderer(ListView.SelectedItemProperty, List.SelectedItem); + OnListItemClicked(List.SelectedIndex); } FrameworkElement FindElement(object cell) |