public void Attach(DependencyObject associatedObject) { AssociatedObject = associatedObject; ((FrameworkElement)AssociatedObject).SizeChanged += AssociatedObject_SizeChanged; var scrollViewer = VisualTreeUtilities.GetVisualChild <ScrollViewer>(associatedObject); if (scrollViewer != null) { foreach (var item in Items) { item.ParentElement = (FrameworkElement)AssociatedObject; item.ScrollViewer = scrollViewer; } scrollViewer.ViewChanged += MainPage_ViewChanged; } else { var element = associatedObject as FrameworkElement; if (element != null) { element.Loaded += element_Loaded; } } }
/// <summary> /// Handles the MouseMove event of the TheTreeView control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e"> /// The <see cref="System.Windows.Input.MouseEventArgs"/> instance containing /// the event data. /// </param> private void TheTreeView_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) { e.Handled = false; if (e.LeftButton == MouseButtonState.Pressed) { Point currentPosition = e.GetPosition(TheTreeView); if ((Math.Abs(currentPosition.X - _lastMouseDown.X) > 10.0) || (Math.Abs(currentPosition.Y - _lastMouseDown.Y) > 10.0)) { TreeViewItem item = VisualTreeUtilities.FindVisualParent <TreeViewItem>(e.OriginalSource as UIElement); if (item != null) { var _draggedItem = (AMLNodeViewModel)TheTreeView.SelectedItem; if (_draggedItem != null) { var dragData = new DataObject(typeof(AMLNodeViewModel), _draggedItem); DragDropEffects finalDropEffect = DragDrop.DoDragDrop(TheTreeView, dragData, DragDropEffects.Move); e.Handled = true; } } } } }
/// <summary> /// Handles the Drop event of the TheTreeView control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e"> /// The <see cref="DragEventArgs"/> instance containing the event data. /// </param> private void TheTreeView_Drop(object sender, DragEventArgs e) { try { // Verify that this is a valid drop and then store the drop target TreeViewItem TargetItem = VisualTreeUtilities.FindVisualParent <TreeViewItem>(e.OriginalSource as UIElement); var draggedItem = e.Data.GetData(typeof(AMLNodeViewModel)) as AMLNodeViewModel; if (TargetItem != null && draggedItem != null) { e.Handled = true; var targetItem = TargetItem.DataContext as AMLNodeViewModel; if (targetItem != null) { if (TreeViewModel.CanDragDrop != null && TreeViewModel.CanDragDrop(TreeViewModel, draggedItem, targetItem)) { if (TreeViewModel.DoDragDrop != null) { TreeViewModel.DoDragDrop(TreeViewModel, draggedItem, targetItem); } } } } } catch (Exception) { } }
private static void OnFirstOccurrenceOnlyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var behavior = d as HighlightTextBehavior; var textBlocks = VisualTreeUtilities.GetChildrenOfType <TextBlock>(behavior.AssociatedObject); behavior.HighlightText(textBlocks); }
public void Detach() { ((FrameworkElement)AssociatedObject).SizeChanged -= AssociatedObject_SizeChanged; var scrollViewer = VisualTreeUtilities.GetVisualChild <ScrollViewer>(AssociatedObject); if (scrollViewer != null) { scrollViewer.ViewChanged -= MainPage_ViewChanged; } }
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { var zoomFactor = (double)values[0]; var layoutElement = VisualTreeUtilities.FindParentWithType <ILayoutControl> ((DependencyObject)values[1]); if (layoutElement?.Model?.FindParent <LayoutFloatingWindow>() == null) { return(1.0); } return(zoomFactor); }
private static void OnSearchTermChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (e.NewValue == null) { return; } var behavior = d as HighlightListTextBehavior; var textBlocks = VisualTreeUtilities.GetChildrenOfType <TextBlock>(behavior.AssociatedObject); behavior.HighlightText(textBlocks); }
private void ScrollBarVerticalVisibilityChanged(object sender, DependencyPropertyChangedEventArgs e) { var helper = (DependencyPropertyChangedHelper)sender; var scrollViewer = VisualTreeUtilities.GetVisualChild <ScrollViewer>(itemsListView); if (((Visibility)e.NewValue) == Visibility.Visible) { // Update the Vertical offset scrollViewer.ChangeView(null, _scrollViewerVerticalOffset, null); helper.PropertyChanged -= ScrollBarVerticalVisibilityChanged; } ; }
protected override void SaveState(Dictionary <string, object> pageState) { if (pageState == null) { return; } base.SaveState(pageState); var scrollViewer = VisualTreeUtilities.GetVisualChild <ScrollViewer>(itemsListView); if (scrollViewer != null) { pageState["entityItemsSvVerticalOffset"] = scrollViewer.VerticalOffset; } }
void element_Loaded(object sender, RoutedEventArgs e) { var element = (DependencyObject)sender; var scrollViewer = VisualTreeUtilities.GetVisualChild <ScrollViewer>(element); if (scrollViewer != null) { scrollViewer.ViewChanged += MainPage_ViewChanged; } foreach (var item in Items) { item.ParentElement = (FrameworkElement)sender; item.ScrollViewer = scrollViewer; item.OnSizeChanged(); } }
private void Page_SizeChanged(object sender, SizeChangedEventArgs e) { var scrollViewer = VisualTreeUtilities.GetVisualChild <ScrollViewer>(itemsGridView); if (scrollViewer != null) { if (scrollViewer.ComputedHorizontalScrollBarVisibility == Visibility.Visible && scrollViewer.ComputedVerticalScrollBarVisibility == Visibility.Visible) { ScrollViewerUtilities.ScrollToProportion(scrollViewer, _scrollViewerOffsetProportion); } else { _horizontalScrollBarVisibilityEventToken = scrollViewer.RegisterPropertyChangedCallback(ScrollViewer.ComputedHorizontalScrollBarVisibilityProperty, ScrollBarVisibilityChanged); _verticalScrollBarVisibilityEventToken = scrollViewer.RegisterPropertyChangedCallback(ScrollViewer.ComputedVerticalScrollBarVisibilityProperty, ScrollBarVisibilityChanged); } } }
private void itemsListView_Loaded(object sender, RoutedEventArgs e) { // Find the ScrollViewer inside the ListView var scrollViewer = VisualTreeUtilities.GetVisualChild <ScrollViewer>(itemsListView); if (scrollViewer != null) { scrollViewer.Visibility = Visibility.Visible; if (scrollViewer.ComputedVerticalScrollBarVisibility == Visibility.Visible) { scrollViewer.ChangeView(null, _scrollViewerVerticalOffset, null); } else { DependencyPropertyChangedHelper helper = new DependencyPropertyChangedHelper(scrollViewer, "ComputedVerticalScrollBarVisibility"); helper.PropertyChanged += ScrollBarVerticalVisibilityChanged; } } }
private void ScrollBarVisibilityChanged(object sender, DependencyPropertyChangedEventArgs e) { var helper = (DependencyPropertyChangedHelper)sender; var scrollViewer = VisualTreeUtilities.GetVisualChild <ScrollViewer>(itemsGridView); if (((Visibility)e.NewValue) == Visibility.Visible) { ScrollViewerUtilities.ScrollToProportion(scrollViewer, _scrollViewerOffsetProportion); helper.PropertyChanged -= ScrollBarVisibilityChanged; } ; if (_isPageLoading) { itemsGridView.LayoutUpdated += itemsGridView_LayoutUpdated; _isPageLoading = false; } }
void Page_SizeChanged(object sender, SizeChangedEventArgs e) { var scrollViewer = VisualTreeUtilities.GetVisualChild <ScrollViewer>(itemsGridView); if (scrollViewer != null) { if (scrollViewer.ComputedHorizontalScrollBarVisibility == Visibility.Visible && scrollViewer.ComputedVerticalScrollBarVisibility == Visibility.Visible) { ScrollViewerUtilities.ScrollToProportion(scrollViewer, _scrollViewerOffsetProportion); } else { DependencyPropertyChangedHelper horizontalHelper = new DependencyPropertyChangedHelper(scrollViewer, "ComputedHorizontalScrollBarVisibility"); horizontalHelper.PropertyChanged += ScrollBarVisibilityChanged; DependencyPropertyChangedHelper verticalHelper = new DependencyPropertyChangedHelper(scrollViewer, "ComputedVerticalScrollBarVisibility"); verticalHelper.PropertyChanged += ScrollBarVisibilityChanged; } } }
private IEnumerable <TextBlock> GetTextBlocksFromRange(ItemIndexRange visibleRange) { var newVisibleRange = visibleRange as ItemIndexRange; var containers = new List <DependencyObject>(); for (int i = newVisibleRange.FirstIndex; i < _previousVisibleRange.FirstIndex; i++) { var container = AssociatedObject.ContainerFromIndex(i); containers.Add(container); } for (int i = _previousVisibleRange.LastIndex + 1; i <= newVisibleRange.LastIndex; i++) { var container = AssociatedObject.ContainerFromIndex(i); containers.Add(container); } _previousVisibleRange = newVisibleRange; return(containers.SelectMany(item => VisualTreeUtilities.GetChildrenOfType <TextBlock>(item as DependencyObject)).ToList()); }
public object Execute(object sender, object parameter) { var eventArgs = parameter as KeyRoutedEventArgs; var listViewBase = sender as ListViewBase; if (listViewBase == null) { throw new ArgumentException($"{nameof(KeyboardListScrollAction)} can only be used with ListViewBase"); } if (ScrollDirectionDelegate == null) { throw new ArgumentNullException(nameof(ScrollDirectionDelegate)); } var horizontalPageSize = HorizontalPageSize; var verticalPageSize = VerticalPageSize; var scrollableSize = horizontalPageSize * verticalPageSize; var currentItem = eventArgs.OriginalSource as SelectorItem; if (currentItem == null) { currentItem = VisualTreeUtilities.GetFirstParentOfType <SelectorItem>(eventArgs.OriginalSource as DependencyObject); } if (currentItem == null) { throw new ArgumentException($"No SelectorItem found in visual tree for {eventArgs.OriginalSource.ToString()}"); } var currentIndex = listViewBase.IndexFromContainer(currentItem); if (currentIndex < 0) { Debug.Assert(currentIndex >= 0, "Current item hasn't been realized yet"); return(null); } var direction = ScrollDirectionDelegate?.Invoke(eventArgs.Key); if (direction == ScrollDirection.None) { return(null); } var targetIndex = currentIndex + (direction == ScrollDirection.Up || direction == ScrollDirection.Left ? -scrollableSize : scrollableSize); var max = listViewBase.Items.Count - 1; targetIndex = Math.Min(max, Math.Max(0, targetIndex)); if (direction == ScrollDirection.Up || direction == ScrollDirection.Left) { for (var i = targetIndex; i < currentIndex; i++) { if (FocusIndex(listViewBase, i)) { break; } } } else { for (var i = targetIndex; i > currentIndex; i--) { if (FocusIndex(listViewBase, i)) { break; } } } return(null); }
private void itemsGridView_Loaded(object sender, RoutedEventArgs e) { _itemsGridViewScrollViewer = VisualTreeUtilities.GetVisualChild <ScrollViewer>(itemsGridView); }