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); } } }); }
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()); } }
/// <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); }
/// <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 })
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; } } }); }
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()); } }
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()); } }
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 { } }