Пример #1
0
            public bool UpdateView(Point hitPoint, bool clear)
            {
                if (clear)
                {
                    Clear();
                    return(false);
                }

                Point testPoint = _DragHelper.TranslateHitPoint(hitPoint, _DragHelper._MetroControlPanel);

                _DropPage = _DragHelper._MetroControlPanel.HitTestForOne <MetroStartPage>(testPoint);
                if (_DropPage == null)
                {
                    Clear();
                    return(false);
                }

                SetDropTargetTiles(_DragHelper.TranslateHitPoint(hitPoint, _DropPage), _DropPage);

                return(true);
            }
Пример #2
0
            public bool DoScroll(Point hitPoint)
            {
                Point pos = _DragHelper.TranslateHitPoint(hitPoint, _ScrollViewer);

                if (pos.Y >= 0 && pos.Y <= _ScrollViewer.ActualHeight)
                {
                    IsScrolling = UpdateScroll(pos.X);
                }
                else
                {
                    StopStoryboard(true);
                    IsScrolling        = false;
                    _LastMousePosition = Double.NaN;
                }

                return(IsScrolling);
            }
Пример #3
0
            private bool SpreadPages(Point hitPoint)
            {
                MetroStartPage pageLeft = null, pageRight = null;
                bool           doSearch = true;

                var testPoint = _DragHelper.TranslateHitPoint(hitPoint, _DragHelper._MetroControlPanel);

                if (testPoint.Y < 0 || testPoint.Y > _DragHelper._MetroControlPanel.ActualHeight)
                {
                    doSearch = false;
                }

                var hitPage = _DragHelper._MetroControlPanel.HitTestForOne <MetroStartPage>(testPoint);

                if (hitPage != null)
                {
                    if (hitPage.MainContent != null)
                    {
                        var contentPos = _DragHelper.TranslateHitPoint(hitPoint, hitPage.MainContent);
                        if (contentPos.X < 0)
                        {
                            pageRight = hitPage;
                        }
                        else if (contentPos.X > hitPage.MainContent.ActualWidth)
                        {
                            pageLeft = hitPage;
                        }
                    }
                }

                if (doSearch)
                {
                    int leftIndex = 0;
                    if (pageLeft != null)
                    {
                        leftIndex = _DragHelper._MetroControl.ItemContainerGenerator.IndexFromContainer(pageLeft) + 1;
                    }
                    int rightIndex = _DragHelper._MetroControl.Items.Count;
                    if (pageRight != null)
                    {
                        rightIndex = _DragHelper._MetroControl.ItemContainerGenerator.IndexFromContainer(pageRight);
                    }

                    for (int i = leftIndex; i < rightIndex; i++)
                    {
                        var page = _DragHelper._MetroControlPanel.Children[i] as MetroStartPage;

                        // Pages are separated by margins on grids defined in their templates. The
                        // grids don't have background set so drag events make it through. Here we're
                        // getting the visible portion of the page against which to test mouse position.
                        var visible = page.MainContent;
                        if (visible == null)
                        {
                            visible = page;
                        }

                        var hitPos = _DragHelper.TranslateHitPoint(hitPoint, visible);
                        if (visible.IsPointWithin(hitPos))
                        {
                            pageLeft = pageRight = null;
                            break;
                        }
                        else if (hitPos.X < 0)
                        {
                            pageRight = page;
                            break;
                        }
                        else if (hitPos.X > visible.ActualWidth)
                        {
                            pageLeft = page;
                        }
                    }

                    if (_DragHelper._DragSourcePage.Items.Count == 1 && (pageLeft == _DragHelper._DragSourcePage || pageRight == _DragHelper._DragSourcePage))
                    {
                        pageRight = pageLeft = null;
                    }
                }

                if (pageLeft != _SpreadPageLeft)
                {
                    if (_SpreadPageLeft != null)
                    {
                        VisualStateManager.GoToState(_SpreadPageLeft, "NoSpread", true);
                    }
                    if (pageLeft != null)
                    {
                        VisualStateManager.GoToState(pageLeft, "SpreadLeft", true);
                    }
                    _SpreadPageLeft = pageLeft;
                }

                if (pageRight != _SpreadPageRight)
                {
                    if (_SpreadPageRight != null)
                    {
                        VisualStateManager.GoToState(_SpreadPageRight, "NoSpread", true);
                    }
                    if (pageRight != null)
                    {
                        VisualStateManager.GoToState(pageRight, "SpreadRight", true);
                    }
                    _SpreadPageRight = pageRight;
                }

                return(pageLeft != null || pageRight != null);
            }