예제 #1
0
        private void SetSelected(_Control control)
        {
            _selectedControls.Add(control);

            if (null == _adornerLayer)
            {
                _adornerLayer = AdornerLayer.GetAdornerLayer(control);
            }
            int rootHasCode = control.GetHashCode();

            if (!_adorners.ContainsKey(rootHasCode))
            {
                if (control is _Line)
                {
                    _adorners.Add(rootHasCode, new LineAdorner(control as _Line));
                }
                else
                {
                    _adorners.Add(rootHasCode, new ElementAdorner(control));
                }
            }
            ElementAdorner rootAdorner = _adorners[rootHasCode];

            _adornerLayer.Add(rootAdorner);

            LoadAdorner(rootAdorner);
        }
예제 #2
0
        private void HandlerMouseButtonLeftDown(MouseButtonEventArgs e, _Control rootElement)
        {
            if (null != rootElement)
            {
                if (null == _adornerLayer)
                {
                    _adornerLayer = AdornerLayer.GetAdornerLayer(rootElement);
                }
                int rootHasCode = rootElement.GetHashCode();
                if (!_adorners.ContainsKey(rootHasCode))
                {
                    if (rootElement is _Line)
                    {
                        _adorners.Add(rootHasCode, new LineAdorner(rootElement as _Line));
                    }
                    else
                    {
                        _adorners.Add(rootHasCode, new ElementAdorner(rootElement));
                    }
                }
                ElementAdorner rootAdorner = _adorners[rootHasCode];
                if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
                {
                    if (_selectedControls.Contains(rootElement))
                    {
                        _adornerLayer.Remove(rootAdorner);

                        UnLoadAdorner(rootAdorner);
                        _selectedControls.Remove(rootElement);
                    }
                    else
                    {
                        _adornerLayer.Add(rootAdorner);

                        LoadAdorner(rootAdorner);

                        _selectedControls.Add(rootElement);
                        rootAdorner.RaisePreviewMouseLeftButtonDown(e);
                    }
                }
                else
                {
                    CleanSelection();
                    _adornerLayer.Add(rootAdorner);

                    LoadAdorner(rootAdorner);
                    _selectedControls.Add(rootElement);
                    rootAdorner.RaisePreviewMouseLeftButtonDown(e);
                }
            }
            else
            {
                CleanSelection();
            }

            if (null != SelectionChangedAction)
            {
                SelectionChangedAction(_selectedControls);
            }
        }
예제 #3
0
 private void ActivatedAdorner()
 {
     foreach (_Control ui in _selectedControls)
     {
         int            hasCode = ui.GetHashCode();
         ElementAdorner adorner = _adorners[hasCode];
         _adorners[hasCode].IsHitTestVisible = true;
     }
 }
예제 #4
0
        public void CleanSelection()
        {
            foreach (_Control ui in _selectedControls)
            {
                int            hasCode = ui.GetHashCode();
                ElementAdorner adorner = _adorners[hasCode];
                _adornerLayer.Remove(adorner);

                UnLoadAdorner(adorner);
            }
            _selectedControls.Clear();
        }
예제 #5
0
        public void Delete()
        {
            foreach (_Control ui in _selectedControls)
            {
                int            hasCode = ui.GetHashCode();
                ElementAdorner adorner = _adorners[hasCode];
                _adornerLayer.Remove(adorner);

                UnLoadAdorner(adorner);
                this.Children.Remove(ui);
            }
            _selectedControls.Clear();
        }
예제 #6
0
 private void UnLoadAdorner(ElementAdorner rootAdorner)
 {
     rootAdorner.OffsetAction                = null;
     rootAdorner.ElementMovingAction         = null;
     rootAdorner.ElementMovedAction          = null;
     rootAdorner.PreviewMouseLeftButtonDown -= Adorner_PreviewMouseLeftButtonDown;
     if (rootAdorner is LineAdorner)
     {
         LineAdorner lineAdorner = rootAdorner as LineAdorner;
         lineAdorner.LineMovingAction = null;
         lineAdorner.LineMovedAction  = null;
     }
 }
예제 #7
0
        private void LoadAdorner(ElementAdorner rootAdorner)
        {
            rootAdorner.OffsetAction                = OnOffset;
            rootAdorner.ElementMovingAction         = OnElementMoving;
            rootAdorner.ElementMovedAction          = OnElementMoved;
            rootAdorner.PreviewMouseLeftButtonDown += Adorner_PreviewMouseLeftButtonDown;

            if (rootAdorner is LineAdorner)
            {
                LineAdorner lineAdorner = rootAdorner as LineAdorner;
                lineAdorner.LineMovingAction = OnLineMoving;
                lineAdorner.LineMovedAction  = OnLineMoved;
            }
        }
예제 #8
0
 private void OnOffset(ElementAdorner sender, ElementAdorner.OffsetType type, double offsetX, double offsetY)
 {
     if (_selectedControls.Count > 1)
     {
         foreach (_Control ui in _selectedControls)
         {
             int            hasCode = ui.GetHashCode();
             ElementAdorner adorner = _adorners[hasCode];
             if (sender != adorner)
             {
                 adorner.Offset(type, offsetX, offsetY);
             }
         }
     }
 }