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); }
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); } }
private void ActivatedAdorner() { foreach (_Control ui in _selectedControls) { int hasCode = ui.GetHashCode(); ElementAdorner adorner = _adorners[hasCode]; _adorners[hasCode].IsHitTestVisible = true; } }
public void CleanSelection() { foreach (_Control ui in _selectedControls) { int hasCode = ui.GetHashCode(); ElementAdorner adorner = _adorners[hasCode]; _adornerLayer.Remove(adorner); UnLoadAdorner(adorner); } _selectedControls.Clear(); }
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(); }
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; } }
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; } }
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); } } } }