/// <summary>
        /// Top alignment
        /// </summary>
        /// <param name="items">Items to align</param>
        public static void AlignTop(ObservableCollection <BaseQuestionViewModel> items)
        {
            double minY = items[0].Top;

            foreach (BaseQuestionViewModel element in items)
            {
                if (minY > element.Top)
                {
                    minY = element.Top;
                }
            }

            List <double> changes = new List <double>(items.Count);

            for (int i = 0; i < items.Count; i++)
            {
                changes.Add(items[i].Top - minY);
                items[i].Top = minY;
            }

            ActionTracker.TrackAlign(items.ToList(), null, changes);
        }
        /// <summary>
        /// Right alignment
        /// </summary>
        /// <param name="items">Items to align</param>
        public static void AlignRight(ObservableCollection <BaseQuestionViewModel> items)
        {
            double maxX = items[0].Left + items[0].Width;

            foreach (BaseQuestionViewModel element in items)
            {
                if (element.Left + element.Width > maxX)
                {
                    maxX = element.Left + element.Width;
                }
            }

            List <double> changes = new List <double>(items.Count);

            for (int i = 0; i < items.Count; i++)
            {
                changes.Add(items[i].Left - (maxX - items[i].Width));
                items[i].Left = maxX - items[i].Width;
            }

            ActionTracker.TrackAlign(items.ToList(), changes, null);
        }
        /// <summary>
        /// Left alignment
        /// </summary>
        /// <param name="items">Items to align</param>
        public static void AlignLeft(ObservableCollection <BaseQuestionViewModel> items)
        {
            double minX = items[0].Left;

            foreach (BaseQuestionViewModel element in items)
            {
                if (minX > element.Left)
                {
                    minX = element.Left;
                }
            }

            List <double> changes = new List <double>(items.Count);

            for (int i = 0; i < items.Count; i++)
            {
                changes.Add(items[i].Left - minX);
                items[i].Left = minX;
            }

            ActionTracker.TrackAlign(items.ToList(), changes, null);
        }
        /// <summary>
        /// Bottom alignment
        /// </summary>
        /// <param name="items">Items to align</param>
        public static void AlignBottom(ObservableCollection <BaseQuestionViewModel> items)
        {
            double maxY = items[0].Top + items[0].Height;

            foreach (BaseQuestionViewModel element in items)
            {
                if (element.Top + element.Height > maxY)
                {
                    maxY = element.Top + element.Height;
                }
            }

            List <double> changes = new List <double>(items.Count);

            for (int i = 0; i < items.Count; i++)
            {
                changes.Add(items[i].Top - (maxY - items[i].Height));
                items[i].Top = maxY - items[i].Height;
            }

            ActionTracker.TrackAlign(items.ToList(), null, changes);
        }