Exemplo n.º 1
0
        public MainWindow()
        {
            InitializeComponent();
            Messenger.Default.Register <CutBoardArgs>(this, OnReceivedCutBoardArgs);

            ArrowWindow arrowWindow = new ArrowWindow();

            arrowWindow.Visibility = Visibility.Collapsed;
            arrowWindow.Show();
        }
        protected override void OnDragOver(DragEventArgs drgevent)
        {
            if (!DesignMode)
            {
                if (drgevent.KeyState == 1 && drgevent.Data.GetDataPresent(typeof(TabPageEx)))
                {
                    TabPageEx over = OverTab();
                    if (over != null)
                    {
                        TabPageEx draggingTab = drgevent.Data.GetData(typeof(TabPageEx)) as TabPageEx;

                        int draggingTabIndex = ((KRBTabControl)draggingTab.Parent).TabPages.IndexOf(draggingTab);
                        int overringTabIndex = this.TabPages.IndexOf(over);

                        bool checkTabs = over.Parent == draggingTab.Parent;
                        if (!checkTabs)
                            draggingTabIndex = overringTabIndex;

                        if (checkTabs ? overringTabIndex != draggingTabIndex : true)
                        {
                            drgevent.Effect = DragDropEffects.Move;
                            Rectangle rctOver = this.GetTabRect(overringTabIndex);

                            if (overringTabIndex == 0)
                            {
                                rctOver.X += _tabHOffset;
                            }

                            if (_alignments == TabAlignments.Top)
                            {
                                rctOver.Y += 3;
                            }
                            else
                            {
                                rctOver.Y -= 3;
                            }

                            if (dragDropArrowArray[0] == null)
                                dragDropArrowArray[0] = new ArrowWindow(Resources.UpArrow, 255);

                            if (dragDropArrowArray[1] == null)
                                dragDropArrowArray[1] = new ArrowWindow(Resources.DownArrow, 255);

                            Point upArrowPoint = Point.Empty;
                            Point downArrowPoint = Point.Empty;

                            if (overringTabIndex > draggingTabIndex)
                            {
                                if (_alignments == TabAlignments.Top)
                                {
                                    downArrowPoint = new Point(rctOver.Right - dragDropArrowArray[1].Width / 2 + 1, rctOver.Top + 2 - dragDropArrowArray[1].Height);
                                    upArrowPoint = new Point(rctOver.Right - dragDropArrowArray[0].Width / 2 + 1, rctOver.Bottom - 10);
                                }
                                else
                                {
                                    downArrowPoint = new Point(rctOver.Right - dragDropArrowArray[1].Width / 2 + 1, rctOver.Top + 11 - dragDropArrowArray[1].Height);
                                    upArrowPoint = new Point(rctOver.Right - dragDropArrowArray[0].Width / 2 + 1, rctOver.Bottom - 3);
                                }
                            }
                            else
                            {
                                if (_alignments == TabAlignments.Top)
                                {
                                    downArrowPoint = new Point(rctOver.Left - dragDropArrowArray[1].Width / 2 + 1, rctOver.Top + 2 - dragDropArrowArray[1].Height);
                                    upArrowPoint = new Point(rctOver.Left - dragDropArrowArray[0].Width / 2 + 1, rctOver.Bottom - 10);
                                }
                                else
                                {
                                    downArrowPoint = new Point(rctOver.Left - dragDropArrowArray[1].Width / 2 + 1, rctOver.Top + 11 - dragDropArrowArray[1].Height);
                                    upArrowPoint = new Point(rctOver.Left - dragDropArrowArray[0].Width / 2 + 1, rctOver.Bottom - 3);
                                }
                            }

                            dragDropArrowArray[0].Location = this.PointToScreen(upArrowPoint);
                            dragDropArrowArray[1].Location = this.PointToScreen(downArrowPoint);

                            if (!dragDropArrowArray[0].Visible)
                                dragDropArrowArray[0].Show();

                            if (!dragDropArrowArray[1].Visible)
                                dragDropArrowArray[1].Show();
                        }
                        else
                            drgevent.Effect = DragDropEffects.None;
                    }
                    else
                        drgevent.Effect = DragDropEffects.None;
                }
                else
                    drgevent.Effect = DragDropEffects.None;
            }

            base.OnDragOver(drgevent);
        }