protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); var settings = new Models.Domain.FolderItemListing.FolderListingSettings(); if (settings.IsForceEnableXYNavigation || Xamarin.Essentials.DeviceInfo.Idiom == Xamarin.Essentials.DeviceIdiom.TV ) { if (FoldersAdaptiveGridView.Items.Any()) { var firstItem = FoldersAdaptiveGridView.Items.First(); var itemContainer = FoldersAdaptiveGridView.ContainerFromItem(firstItem) as Control; itemContainer.Focus(FocusState.Keyboard); } else if (FileItemsRepeater_Small.ItemsSource != null && FileItemsRepeater_Small.Visibility == Visibility.Visible) { var item = FileItemsRepeater_Small.FindDescendant <Control>(); item?.Focus(FocusState.Keyboard); } else if (FileItemsRepeater_Midium.ItemsSource != null && FileItemsRepeater_Midium.Visibility == Visibility.Visible) { var item = FileItemsRepeater_Midium.FindDescendant <Control>(); item?.Focus(FocusState.Keyboard); } else if (FileItemsRepeater_Large.ItemsSource != null && FileItemsRepeater_Large.Visibility == Visibility.Visible) { var item = FileItemsRepeater_Large.FindDescendant <Control>(); item?.Focus(FocusState.Keyboard); } else { ReturnSourceFolderPageButton.Focus(FocusState.Keyboard); this.FoldersAdaptiveGridView.ContainerContentChanging -= FoldersAdaptiveGridView_ContainerContentChanging; this.FileItemsRepeater_Small.ElementPrepared -= FileItemsRepeater_Large_ElementPrepared; this.FileItemsRepeater_Midium.ElementPrepared -= FileItemsRepeater_Large_ElementPrepared; this.FileItemsRepeater_Large.ElementPrepared -= FileItemsRepeater_Large_ElementPrepared; this.FoldersAdaptiveGridView.ContainerContentChanging += FoldersAdaptiveGridView_ContainerContentChanging; this.FileItemsRepeater_Small.ElementPrepared += FileItemsRepeater_Large_ElementPrepared; this.FileItemsRepeater_Midium.ElementPrepared += FileItemsRepeater_Large_ElementPrepared; this.FileItemsRepeater_Large.ElementPrepared += FileItemsRepeater_Large_ElementPrepared; } } }
protected override async void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); await Task.Delay(500); var settings = new Models.Domain.FolderItemListing.FolderListingSettings(); if (settings.IsForceEnableXYNavigation || Xamarin.Essentials.DeviceInfo.Idiom == Xamarin.Essentials.DeviceIdiom.TV ) { if (FoldersAdaptiveGridView.Items.Any()) { var firstItem = FoldersAdaptiveGridView.Items.First(); var itemContainer = FoldersAdaptiveGridView.ContainerFromItem(firstItem) as Control; if (itemContainer != null) { itemContainer.Focus(FocusState.Keyboard); } } } }
public async void BringIntoViewLastIntractItem() { var pageVM = (DataContext as FolderListupPageViewModel); var lastIntaractItem = pageVM.FolderLastIntractItem.Value; if (lastIntaractItem != null) { DependencyObject item; do { item = FoldersAdaptiveGridView.ContainerFromItem(lastIntaractItem); await Task.Delay(10); }while (item == null); if (item is Control control) { var transform = control.TransformToVisual(RootScrollViewer); var positionInScrollViewer = transform.TransformPoint(new Point(0, 0)); RootScrollViewer.ChangeView(null, positionInScrollViewer.Y, null, true); control.Focus(FocusState.Keyboard); } } else if (pageVM.ImageLastIntractItem.Value >= 1) { // 実際にスクロールするまでItemTemplateは解決されない // 一旦Opacity=0.0に設定した上で要素が取れるまでプログラマチックにスクロールしていく // 要素が取れてスクロールが完了したらOpacity=1.0に戻す /* * DependencyObject item; * var visibleItemsRepeater = new[] { FileItemsRepeater_Line, FileItemsRepeater_Small, FileItemsRepeater_Midium, FileItemsRepeater_Large }.First(x => x.Visibility == Visibility.Visible); * visibleItemsRepeater.Opacity = 0.0; * RootScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden; * double offset = 0; * { * var transform = visibleItemsRepeater.TransformToVisual(RootScrollViewer); * var positionInScrollViewer = transform.TransformPoint(new Point(0, 0)); * RootScrollViewer.ChangeView(null, positionInScrollViewer.Y, null, true); * offset = positionInScrollViewer.Y; * } * * do * { * item = visibleItemsRepeater.TryGetElement(pageVM.ImageLastIntractItem.Value); * * RootScrollViewer.ChangeView(null, offset, null, true); * * offset += RootScrollViewer.ViewportHeight; * * await Task.Delay(10); * } * while (item == null); * * await Task.Delay(100); * * if (item is Control control) * { * var transform = control.TransformToVisual(RootScrollViewer); * var positionInScrollViewer = transform.TransformPoint(new Point(0, 0)); * control.Focus(FocusState.Keyboard); * RootScrollViewer.StartBringIntoView(new BringIntoViewOptions() { AnimationDesired = false }); * // RootScrollViewer.ChangeView(null, positionInScrollViewer.Y, null, true); * } * * visibleItemsRepeater.Opacity = 1.0; * RootScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Visible; */ } }