public StageEditor AddStageEditor(Pattern.Stage stage)
        {
            StageEditor editor = AddStageEditor();

            editor.Stage = stage;
            return(editor);
        }
        private void OnStageEditorDeleteClick(object sender, EventArgs e)
        {
            StageEditor editor = sender as StageEditor;

            if (editor != null)
            {
                RemoveStageEditor(editor);
            }
        }
        public void RemoveStageEditors()
        {
            foreach (UIElement element in StageEditorsDragCanvas.Children)
            {
                StageEditor editor = element as StageEditor;
                if (editor != null)
                {
                    editor.DeleteButtonClick -= OnStageEditorDeleteClick;
                }
            }

            StageEditorsDragCanvas.Children.Clear();
        }
        public StageEditor AddStageEditor()
        {
            StageEditor editor = new StageEditor();
            editor.Width = DefaultStageEditorMaxWidth;
            editor.Height = DefaultStageEditorHeight;
            editor.DeleteButtonClick += OnStageEditorDeleteClick;

            int index = StageEditorsDragCanvas.Children.Add(editor);
            SetStageEditorAppropriateYPosition(index);
            CenterStageEditor(index);
            SetDragCanvasFitStageEditors();
            return editor;
        }
        public void RemoveStageEditor(StageEditor editor)
        {
            if (editor == null)
                return;

            if (StageEditorsDragCanvas.Children.Contains(editor))
            {
                editor.DeleteButtonClick -= OnStageEditorDeleteClick;
                StageEditorsDragCanvas.Children.Remove(editor);
                SetAllStageEditorsAppropriateYPositions();
                CenterStageEditors();
                SetDragCanvasFitStageEditors();
            }
        }
        public StageEditor AddStageEditor()
        {
            StageEditor editor = new StageEditor();

            editor.Width              = DefaultStageEditorMaxWidth;
            editor.Height             = DefaultStageEditorHeight;
            editor.DeleteButtonClick += OnStageEditorDeleteClick;

            int index = StageEditorsDragCanvas.Children.Add(editor);

            SetStageEditorAppropriateYPosition(index);
            CenterStageEditor(index);
            SetDragCanvasFitStageEditors();
            return(editor);
        }
        private void CenterStageEditor(int index)
        {
            double canvasWidth = StageEditorsDragCanvas.ActualWidth;

            double editorsWidth = DefaultStageEditorMaxWidth > canvasWidth ? canvasWidth : DefaultStageEditorMaxWidth;
            double x            = canvasWidth / 2 - editorsWidth / 2;

            StageEditor editor = (StageEditor)StageEditorsDragCanvas.Children[index];

            if (editor.Width != editorsWidth)
            {
                editor.Width = editorsWidth;
            }
            Canvas.SetLeft(editor, x);
        }
        public void RemoveStageEditor(StageEditor editor)
        {
            if (editor == null)
            {
                return;
            }

            if (StageEditorsDragCanvas.Children.Contains(editor))
            {
                editor.DeleteButtonClick -= OnStageEditorDeleteClick;
                StageEditorsDragCanvas.Children.Remove(editor);
                SetAllStageEditorsAppropriateYPositions();
                CenterStageEditors();
                SetDragCanvasFitStageEditors();
            }
        }
        private void CenterStageEditors()
        {
            double canvasWidth = StageEditorsDragCanvas.ActualWidth;

            double editorsWidth = DefaultStageEditorMaxWidth > canvasWidth ? canvasWidth : DefaultStageEditorMaxWidth;
            double x            = canvasWidth / 2 - editorsWidth / 2;

            for (int i = 0; i < StageEditorsDragCanvas.Children.Count; i++)
            {
                StageEditor editor = (StageEditor)StageEditorsDragCanvas.Children[i];
                if (editor.Width != editorsWidth)
                {
                    editor.Width = editorsWidth;
                }
                Canvas.SetLeft(editor, x);
            }
        }