bool HandleBackRequest()
        {
            var currentPageType = ContentFrame.Content?.GetType();

            if (!CanGoBackPageTypes.Contains(ContentFrame.Content.GetType()))
            {
                Debug.WriteLine($"{currentPageType.Name} からの戻る操作をブロック");
                return(false);
            }

            if (_navigationService.CanGoBack())
            {
                var backNavigationParameters = BackParametersStack.ElementAtOrDefault(BackParametersStack.Count - 1);
                {
                    var last       = BackParametersStack.Last();
                    var parameters = GetCurrentNavigationParameter();    // GoBackAsyncを呼ぶとCurrentNavigationParametersが入れ替わる。呼び出し順に注意。
                    BackParametersStack.Remove(last);
                    ForwardParametersStack.Add(parameters);
                }
                _ = backNavigationParameters == null
                    ? _navigationService.GoBackAsync()
                    : _navigationService.GoBackAsync(backNavigationParameters)
                ;

                return(true);
            }
            else
            {
                _navigationService.NavigateAsync(nameof(Views.SourceStorageItemsPage));
            }

            return(false);
        }
Пример #2
0
        private void SetupBackButton()
        {
            var children = XamlUtilities.RecurseChildren(this);
            var grids    = children.OfType <Grid>();
            var grid     = grids.Single(x => x.Name == "TogglePaneTopPadding");

            grid.Visibility = Visibility.Collapsed;

            grid = grids.Single(x => x.Name == "ContentPaneTopPadding");
            grid.RegisterPropertyChangedCallback(HeightProperty, (s, args) =>
            {
                if (grid.Height != 44d)
                {
                    grid.Height = 44d;
                }
            });
            grid.Height = 44d;

            var child_buttons = children.OfType <Button>();

            _togglePaneButton = child_buttons.Single(x => x.Name == "TogglePaneButton");
            _togglePaneButton.RegisterPropertyChangedCallback(MarginProperty, (s, args) =>
            {
                if (_togglePaneButton.Margin.Top != 0)
                {
                    _togglePaneButton.Margin = new Thickness(0, 0, 0, 32);
                }
            });
            _togglePaneButton.Margin = new Thickness(0, 0, 0, 32);
            _togglePaneButton.Focus(FocusState.Programmatic);

            var parent_grid = _togglePaneButton.Parent as Grid;

            parent_grid.Width = double.NaN;
            parent_grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(48)
            });
            parent_grid.ColumnDefinitions.Add(new ColumnDefinition {
            });
            parent_grid.RowDefinitions[0].Height = GridLength.Auto;
            parent_grid.RowDefinitions[1].Height = GridLength.Auto;

            _paneTitleTextBlock = new TextBlock
            {
                Name              = "PaneTitleTextBlock",
                Margin            = new Thickness(8, 18, 0, 0),
                FontSize          = 15,
                FontFamily        = new FontFamily("Segoe UI Bold"),
                TextWrapping      = TextWrapping.NoWrap,
                Foreground        = Resources["SystemControlForegroundBaseHighBrush"] as Brush,
                VerticalAlignment = VerticalAlignment.Top,
                IsHitTestVisible  = false,
                Text              = "Jerry Nixon",
            };
            _paneTitleTextBlock.SetValue(Grid.ColumnProperty, 1);
            _paneTitleTextBlock.SetValue(Grid.RowProperty, 1);
            _paneTitleTextBlock.SetValue(Canvas.ZIndexProperty, 100);
            // parent_grid.Children.Add(_paneTitleTextBlock);

            _backButton = new Button
            {
                Name    = "BackButton",
                Content = new SymbolIcon
                {
                    Symbol           = Symbol.Back,
                    IsHitTestVisible = false
                },
                Style = Resources["PaneToggleButtonStyle"] as Style,
            };
            _backButton.SetValue(Canvas.ZIndexProperty, 100);
            parent_grid.Children.Insert(1, _backButton);

            NavigationService.CanGoBackChanged += (s, args) =>
            {
                _backButton.IsEnabled = NavigationService.CanGoBack();
            };

            _backButton.Click += (s, args) =>
            {
                var gesture_service = GestureService.GetForCurrentView();
                gesture_service.RaiseBackRequested();
            };
        }