コード例 #1
0
        private async void GridViewPages_Loaded(object sender, RoutedEventArgs e)
        {
            await RunOnUIThreadAsync(CoreDispatcherPriority.High, () =>
            {
                if (GridViewPages.Items.Count >= 1)
                {
                    int index = ViewModel.SelectedPageIndex;

                    // fix GridView initially fails to select item by binding
                    GridViewPages.SelectedIndex = index;

                    // try scroll to selected item
                    try
                    {
                        GridViewItem item = (GridViewItem)GridViewPages.ContainerFromIndex(index);
                        Guard.IsNotNull(item, nameof(item));

                        BringIntoViewOptions options = new BringIntoViewOptions
                        {
                            AnimationDesired = false,
                        };
                        item.StartBringIntoView(options);
                    }
                    catch (Exception exc)
                    {
                        ViewModel.AppCenterService.TrackError(exc);
                    }
                }
            });
        }
コード例 #2
0
        private void BtnStartBringIntoView_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                txtInnerStockOffsetsChangeDuration.Text = string.Empty;
                txtOuterStockOffsetsChangeDuration.Text = string.Empty;

                FrameworkElement targetElement = null;
                ItemsRepeater    repeater      = null;

                switch (cmbNestingCombination.SelectedIndex)
                {
                case 0:     //ScrollerInScroller
                    repeater = repeater1;
                    break;

                case 1:     //ScrollerInScrollViewer
                    repeater = repeater2;
                    break;

                case 2:     //ScrollViewerInScroller
                    repeater = repeater3;
                    break;
                }

                Border border = repeater.TryGetElement(Convert.ToInt16(txtTargetElement.Text)) as Border;

                if (border != null)
                {
                    targetElement = border.Child as FrameworkElement;

                    if (targetElement != null)
                    {
                        BringIntoViewOptions options = new BringIntoViewOptions();

                        options.AnimationDesired         = cmbAnimationDesired.SelectedIndex == 0;
                        options.HorizontalAlignmentRatio = Convert.ToDouble(txtHorizontalAlignmentRatio.Text);
                        options.VerticalAlignmentRatio   = Convert.ToDouble(txtVerticalAlignmentRatio.Text);
                        options.HorizontalOffset         = Convert.ToDouble(txtHorizontalOffset.Text);
                        options.VerticalOffset           = Convert.ToDouble(txtVerticalOffset.Text);

                        if (chkLogBringIntoViewRequestedEvents.IsChecked == true)
                        {
                            AppendAsyncEventMessage("Invoking StartBringIntoView on " + targetElement.Name);
                        }
                        targetElement.StartBringIntoView(options);
                    }
                }

                if (targetElement == null && chkLogBringIntoViewRequestedEvents.IsChecked == true)
                {
                    AppendAsyncEventMessage("TargetElement not found");
                }
            }
            catch (Exception ex)
            {
                txtExceptionReport.Text = ex.ToString();
                lstScrollerEvents.Items.Add(ex.ToString());
            }
        }
コード例 #3
0
    /// <summary>
    /// Initiates a request to the XAML framework to bring the element into view within any scrollable regions it is contained within.
    /// </summary>
    public void StartBringIntoView()
    {
        var bringIntoViewOptions = new BringIntoViewOptions()
        {
            AnimationDesired = true,
        };

        StartBringIntoView(bringIntoViewOptions);
    }
コード例 #4
0
    /// <summary>
    /// Initiates a request to the XAML framework to bring the element into view using the specified options.
    /// </summary>
    /// <param name="options">Options.</param>
    public void StartBringIntoView(BringIntoViewOptions options)
    {
        if (options is null)
        {
            throw new ArgumentNullException(nameof(options));
        }

        if (Visibility == Visibility.Collapsed || this is FrameworkElement {
            IsLoaded : false
        })
コード例 #5
0
        private async void GridViewPages_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            await RunOnUIThreadAsync(CoreDispatcherPriority.Normal, () =>
            {
                if (GridViewPages.SelectionMode == ListViewSelectionMode.Single &&
                    e.AddedItems != null & e.AddedItems.Count != 0)
                {
                    // select page in view model
                    ViewModel.SelectedPageIndex = GridViewPages.SelectedIndex;

                    // scroll to newly selected item
                    try
                    {
                        GridViewItem item = (GridViewItem)GridViewPages.ContainerFromItem(e.AddedItems[0]);

                        BringIntoViewOptions options = new BringIntoViewOptions
                        {
                            AnimationDesired = true,
                        };
                        item.StartBringIntoView(options);
                    }
                    catch (Exception)
                    {
                    }
                }
                else if (GridViewPages.SelectionMode == ListViewSelectionMode.Single)
                {
                    try
                    {
                        GridViewPages.SelectedIndex = ViewModel.SelectedPageIndex;
                    }
                    catch (Exception) { }
                }
                else if (GridViewPages.SelectionMode != ListViewSelectionMode.Single)
                {
                    // connect items to view model
                    if (GridViewPages.SelectedRanges.Count == 0)
                    {
                        ViewModel.SelectedRanges = null;
                    }
                    else
                    {
                        ViewModel.SelectedRanges = GridViewPages.SelectedRanges;
                    }

                    // select last selected item in view model
                    if (e.AddedItems != null && e.AddedItems.Count != 0)
                    {
                        int index = GridViewPages.Items.IndexOf(e.AddedItems[e.AddedItems.Count - 1]);
                        ViewModel.SelectedPageIndex = index;
                    }
                }
            });
        }
コード例 #6
0
        private void BtnStartBringIntoView_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                txtStockOffsetsChangeDuration.Text = string.Empty;

                FrameworkElement targetElement = null;

                switch (cmbTargetElement.SelectedIndex)
                {
                case 0:
                    targetElement = rectangle;
                    break;

                case 1:
                    targetElement = scrollView;
                    break;
                }

                if (targetElement != null)
                {
                    BringIntoViewOptions options = new BringIntoViewOptions();

                    options.AnimationDesired         = cmbAnimationDesired.SelectedIndex == 0;
                    options.HorizontalAlignmentRatio = Convert.ToDouble(txtHorizontalAlignmentRatio.Text);
                    options.VerticalAlignmentRatio   = Convert.ToDouble(txtVerticalAlignmentRatio.Text);
                    options.HorizontalOffset         = Convert.ToDouble(txtHorizontalOffset.Text);
                    options.VerticalOffset           = Convert.ToDouble(txtVerticalOffset.Text);

                    if (chkLogScrollViewMessages.IsChecked == true)
                    {
                        AppendAsyncEventMessage("Invoking StartBringIntoView on " + targetElement.Name);
                    }
                    targetElement.StartBringIntoView(options);
                }

                if (targetElement == null && chkLogScrollViewMessages.IsChecked == true)
                {
                    AppendAsyncEventMessage("TargetElement not found");
                }
            }
            catch (Exception ex)
            {
                txtExceptionReport.Text = ex.ToString();
                lstLogs.Items.Add(ex.ToString());
            }
        }
コード例 #7
0
        private void BtnStartBringIntoView_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                txtInnerStockOffsetsChangeDuration.Text = string.Empty;
                txtOuterStockOffsetsChangeDuration.Text = string.Empty;

                FrameworkElement targetElement = null;
                ItemsRepeater    repeater      = null;

                switch (cmbNestingCombination.SelectedIndex)
                {
                case 0:     //ScrollPresenterInScrollPresenter (1)
                    repeater = repeater1;
                    break;

                case 2:     //ScrollPresenterInScrollViewer
                    repeater = repeater2;
                    break;

                case 3:     //ScrollViewerInScrollPresenter
                    repeater = repeater3;
                    break;

                case 4:     //ScrollViewerInScrollViewer
                    repeater = repeater4;
                    break;
                }

                Border border = null;

                if (repeater != null)
                {
                    border = repeater.TryGetElement(Convert.ToInt16(txtTargetElement.Text)) as Border;
                }
                else
                {
                    // case ScrollPresenterInScrollPresenter (2)
                    border = (innerScrollPresenter3.Content as StackPanel).Children[Convert.ToInt16(txtTargetElement.Text)] as Border;
                }

                if (border != null)
                {
                    targetElement = border.Child as FrameworkElement;

                    if (targetElement != null)
                    {
                        BringIntoViewOptions options = new BringIntoViewOptions();

                        options.AnimationDesired         = cmbAnimationDesired.SelectedIndex == 0;
                        options.HorizontalAlignmentRatio = Convert.ToDouble(txtHorizontalAlignmentRatio.Text);
                        options.VerticalAlignmentRatio   = Convert.ToDouble(txtVerticalAlignmentRatio.Text);
                        options.HorizontalOffset         = Convert.ToDouble(txtHorizontalOffset.Text);
                        options.VerticalOffset           = Convert.ToDouble(txtVerticalOffset.Text);

                        if (chkIgnoreSnapPoints.IsChecked == false)
                        {
                            ScrollPresenter scrollPresenter1 = null;
                            ScrollPresenter scrollPresenter2 = null;

                            switch (cmbNestingCombination.SelectedIndex)
                            {
                            case 0:     //ScrollPresenterInScrollPresenter (1)
                                scrollPresenter1 = outerScrollPresenter;
                                scrollPresenter2 = innerScrollPresenter;
                                break;

                            case 1:     //ScrollPresenterInScrollPresenter (2)
                                scrollPresenter1 = outerScrollPresenter3;
                                scrollPresenter2 = innerScrollPresenter3;
                                break;

                            case 2:     //ScrollPresenterInScrollViewer
                                scrollPresenter1 = innerScrollPresenter2;
                                break;

                            case 3:     //ScrollViewerInScrollPresenter
                                scrollPresenter1 = outerScrollPresenter2;
                                break;
                            }

                            if (scrollPresenter1 != null)
                            {
                                RefreshSnapPoints(scrollPresenter1, scrollPresenter1.Content as StackPanel);
                            }

                            if (scrollPresenter2 != null)
                            {
                                RefreshSnapPoints(scrollPresenter2, scrollPresenter2.Content as StackPanel);
                            }
                        }

                        if (chkLogBringIntoViewRequestedEvents.IsChecked == true)
                        {
                            AppendAsyncEventMessage("Invoking StartBringIntoView on " + targetElement.Name);
                        }
                        targetElement.StartBringIntoView(options);
                    }
                }

                if (targetElement == null && chkLogBringIntoViewRequestedEvents.IsChecked == true)
                {
                    AppendAsyncEventMessage("TargetElement not found");
                }
            }
            catch (Exception ex)
            {
                txtExceptionReport.Text = ex.ToString();
                lstScrollPresenterEvents.Items.Add(ex.ToString());
            }
        }
コード例 #8
0
        private async void ButtonCardItem_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
        {
            FlipViewBanner.UpdateLayout();
            VerticalRepeater.UpdateLayout();

            FindNextElementOptions findNextElementOptions = new FindNextElementOptions
            {
                SearchRoot = ScrollViewerHome,
                XYFocusNavigationStrategyOverride = XYFocusNavigationStrategyOverride.NavigationDirectionDistance
            };
            //Before move focus
            //Get current item data context
            var currentItem         = (sender as Button).DataContext as ProductItem;
            var currentFocusElement = FocusManager.GetFocusedElement() as Button;


            try
            {
                switch (e.OriginalKey)
                {
                case VirtualKey.Up:
                case VirtualKey.GamepadDPadUp:
                case VirtualKey.GamepadLeftThumbstickUp:
                {
                    BringIntoViewOptions options = new BringIntoViewOptions
                    {
                        VerticalOffset   = 50.0,
                        AnimationDesired = true
                    };

                    //var tt = currentFocusElement.TransformToVisual(appWindow.Content);
                    //Point currentFocusLeftTopPoint = tt.TransformPoint(new Point(appWindow.Bounds.Left, appWindow.Bounds.Top));
                    //Rect rect = new Rect(124, currentFocusLeftTopPoint.Y - 500, 1920, 500);
                    //var nextFocus = FocusManager.FindNextFocusableElement(FocusNavigationDirection.Next, rect);


                    var candidate = FocusManager.FindNextElement(FocusNavigationDirection.Up, findNextElementOptions);
                    if (candidate != null && candidate is Button)
                    {
                        (candidate as Control).StartBringIntoView();
                        (candidate as Control).Focus(FocusState.Programmatic);

                        e.Handled = true;
                    }
                    else if (candidate != null)
                    {
                        var current          = FlipViewBanner.SelectedItem;
                        var currentContainer = FlipViewBanner.ContainerFromItem(current) as FlipViewItem;
                        var result           = await FocusManager.TryFocusAsync(currentContainer, FocusState.Programmatic);

                        currentContainer.StartBringIntoView();
                        e.Handled = true;
                    }
                }
                break;

                case VirtualKey.Down:
                case VirtualKey.GamepadDPadDown:
                case VirtualKey.GamepadLeftThumbstickDown:
                {
                    //Last river
                    BringIntoViewOptions options = new BringIntoViewOptions
                    {
                        VerticalOffset   = -50.0,
                        AnimationDesired = true
                    };

                    var candidate = FocusManager.FindNextElement(FocusNavigationDirection.Down, findNextElementOptions);
                    if (candidate != null && candidate is Control)
                    {
                        (candidate as Control).StartBringIntoView();
                        (candidate as Control).Focus(FocusState.Programmatic);

                        e.Handled = true;
                    }
                }
                break;

                case VirtualKey.Left:
                case VirtualKey.GamepadDPadLeft:
                case VirtualKey.GamepadLeftThumbstickLeft:
                {
                    var parent = TreeHelper.FindParentByName <ItemsRepeater>(sender as Button, "HorizontalRepeater");
                    FindNextElementOptions findNextElementOptions1 = new FindNextElementOptions
                    {
                        SearchRoot = parent,
                        XYFocusNavigationStrategyOverride = XYFocusNavigationStrategyOverride.Projection
                    };
                    var candidate = FocusManager.FindNextElement(FocusNavigationDirection.Left, findNextElementOptions1);
                    if (candidate != null && candidate is Control)
                    {
                        (candidate as Control).StartBringIntoView();
                        (candidate as Control).Focus(FocusState.Programmatic);

                        e.Handled = true;
                    }
                    else
                    {
                        ShellPage.shellPage.navigationView.IsPaneOpen = true;
                        e.Handled = true;
                    }
                }
                break;

                case VirtualKey.Right:
                case VirtualKey.GamepadDPadRight:
                case VirtualKey.GamepadLeftThumbstickRight:
                {
                }
                break;

                case VirtualKey.GamepadA:
                case VirtualKey.Enter:
                case VirtualKey.Space:
                {
                }
                break;

                default:
                    break;
                }
            }
            catch { }
            finally
            {
            }
        }