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;
                }
            }
        }
Esempio n. 2
0
        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;
                 */
            }
        }