public SelectionRectDragController(SelectionRectDragControllerSetupArgs args)
        {
            _nodes                  = args.Nodes;
            _connections            = args.Connections;
            _panel                  = args.BaseControl;
            SelectionChangedCommand = args.SelectionChangedCommand;


            var startPosition = args.Args.GetPosition(args.BaseControl);

            _startPoint.X = startPosition.X;
            _startPoint.Y = startPosition.Y;

            //! オプション引数としてStyleが渡されている場合はStyleを適用する
            if (args.BaseControl.Style != null)
            {
                Debug.Assert(args.RectangleStyle.TargetType == typeof(Rectangle));
                Rectangle.Style = args.RectangleStyle;
            }
            else // デフォルトスタイルを利用する
            {
                if (_defaultStyle is null)
                {
                    _defaultStyle = make_default_style();
                }
                Rectangle.Style = _defaultStyle;
            }

            Canvas.SetLeft(Rectangle, _startPoint.X);
            Canvas.SetTop(Rectangle, _startPoint.Y);
            Rectangle.Width  = 1;
            Rectangle.Height = 1;
            _panel.Children.Add(Rectangle);
        }
        public IDragController Build()
        {
            var setupArgs = new SelectionRectDragControllerSetupArgs(
                _dragControllerBuilder.InputElement,
                _dragControllerBuilder.MouseEventArgs,
                _dragControllerBuilder.Nodes,
                _dragControllerBuilder.ConnectionShapes)
            {
                SelectionChangedCommand = _dragControllerBuilder.SelectionChangedCommand,
                RectangleStyle          = SelectionRectangleStyle
            };

            return(new SelectionRectDragController(setupArgs));
        }