/// <summary>
        /// This method docks the window to the defined edge
        /// </summary>
        /// <param name="taskBarEdge">Edge to use</param>
        /// <param name="screen">Active Screen</param>
        public void Dock(TaskBar.TaskBarEdge taskBarEdge, int screen)
        {
            switch (taskBarEdge)
            {
            case TaskBar.TaskBarEdge.NotDocked:
                ResizeDirections = (ResizeDirectionFlags)255;
                break;

            case TaskBar.TaskBarEdge.Left:
                ResizeDirections = ResizeDirectionFlags.SizeE;
                break;

            case TaskBar.TaskBarEdge.Top:
                ResizeDirections = ResizeDirectionFlags.SizeS;
                break;

            case TaskBar.TaskBarEdge.Right:
                ResizeDirections = ResizeDirectionFlags.SizeW;
                break;

            case TaskBar.TaskBarEdge.Bottom:
                ResizeDirections = ResizeDirectionFlags.SizeN;
                break;

            default:
                throw new ArgumentOutOfRangeException("taskBarEdge");
            }

            // Dock the window
            docker.Dock(taskBarEdge, screen);
        }
        private void TimerTick(object sender, EventArgs e)
        {
            try
            {
                Point currentPosition           = TaskBar.GetTaskBarLocation();
                Size  currentSize               = TaskBar.GetTaskBarSize();
                TaskBar.TaskBarEdge currentEdge = TaskBar.GetTaskBarEdge();

                if (lastLocation != currentPosition || lastEdge != currentEdge || lastSize != currentSize)
                {
                    lastLocation = currentPosition;
                    lastEdge     = currentEdge;
                    lastSize     = currentSize;

                    if (!isFirstRun)
                    {
                        Dock(DockedTo, ActiveScreenIndex);
                    }

                    isFirstRun = false;
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }
        }
        /// <summary>
        /// Adjust the sliding behaviour depending on the current docking position
        /// </summary>
        /// <param name="width">Window with</param>
        /// <param name="height">Window height</param>
        /// <param name="dockedTo">Window docking position</param>
        private void AdjustSlidingBehaviour(double width, double height, TaskBar.TaskBarEdge dockedTo)
        {
            int offset = 0;

            if (PinStyle == PinStyle.TouchFriendly)
            {
                offset = 16;
            }

            switch (dockedTo)
            {
            case TaskBar.TaskBarEdge.NotDocked:
                SlideOutWidth  = 0;
                SlideOutHeight = 0;
                break;

            case TaskBar.TaskBarEdge.Left:
                SlideOutWidth  = -(width - HIDE_SIZE - offset);
                SlideOutHeight = 0;
                break;

            case TaskBar.TaskBarEdge.Top:
                SlideOutWidth  = 0;
                SlideOutHeight = -(height - HIDE_SIZE - offset);
                break;

            case TaskBar.TaskBarEdge.Right:
                SlideOutWidth  = width - HIDE_SIZE - offset;
                SlideOutHeight = 0;
                break;

            case TaskBar.TaskBarEdge.Bottom:
                SlideOutWidth  = 0;
                SlideOutHeight = height - HIDE_SIZE - offset;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
        public void Dock(TaskBar.TaskBarEdge dockTo, int nr)
        {
            // Store the current docking
            dockedTo          = dockTo;
            activeScreenIndex = nr;

            switch (dockTo)
            {
            case TaskBar.TaskBarEdge.Left:
                PostionLeft();
                break;

            case TaskBar.TaskBarEdge.Top:
                PostionTop();
                break;

            case TaskBar.TaskBarEdge.Right:
                PostionRight();
                break;

            case TaskBar.TaskBarEdge.Bottom:
                PostionBottom();
                break;

            case TaskBar.TaskBarEdge.NotDocked:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            if (OnDockingChanged != null)
            {
                OnDockingChanged(dockTo);
            }
        }
 /// <summary>
 /// Called when the docking style Changed
 /// </summary>
 /// <param name="dockedTo">New DockedTo Value</param>
 private void OnDockingChanged(TaskBar.TaskBarEdge dockedTo)
 {
     AdjustSlidingBehaviour(Width, Height, dockedTo);
 }
 public OnTaskBarMovedEventHandlerArgs(TaskBar.TaskBarEdge currentEdge, Point currentPosition)
 {
     CurrentEdge     = currentEdge;
     CurrentPosition = currentPosition;
 }