Example #1
0
        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;
                }
            }
        }
Example #2
0
        /// <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;
                        }
                    }
                }
            }
        }
Example #3
0
        /// <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)
            {
            }
        }
Example #4
0
        private static void OnFirstOccurrenceOnlyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var behavior   = d as HighlightTextBehavior;
            var textBlocks = VisualTreeUtilities.GetChildrenOfType <TextBlock>(behavior.AssociatedObject);

            behavior.HighlightText(textBlocks);
        }
Example #5
0
        public void Detach()
        {
            ((FrameworkElement)AssociatedObject).SizeChanged -= AssociatedObject_SizeChanged;

            var scrollViewer = VisualTreeUtilities.GetVisualChild <ScrollViewer>(AssociatedObject);

            if (scrollViewer != null)
            {
                scrollViewer.ViewChanged -= MainPage_ViewChanged;
            }
        }
Example #6
0
        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;
            }
        }
Example #10
0
        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());
        }
Example #16
0
        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);
 }