private void AssociatedObjectOnMouseDown(object sender, MouseButtonEventArgs mouseButtonEventArgs) { // Si ya se está llevando a cabo una operación de arrastre, ¡huye! if (_isDragging) { return; } if (PrimaryButtonState(mouseButtonEventArgs) == MouseButtonState.Pressed) { _dragStart = mouseButtonEventArgs.GetPosition(AssociatedObject); _isDragging = true; _adornerLayer = AdornerLayer.GetAdornerLayer(AssociatedObject); if (_adornerLayer == null) { throw new NullReferenceException("No se ha podido obtener la Adorner Layer"); } AssociatedObject.CaptureMouse(); _adorner = new SelectionAdorner(AssociatedObject) { Template = SelectionRectangleTemplate, Left = _dragStart.X, Top = _dragStart.Y }; _adornerLayer.Add(_adorner); } }
/// <summary> /// Handles changes to the Template property. /// </summary> private static void OnTemplateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { SelectionAdorner target = (SelectionAdorner)d; ControlTemplate oldTemplate = (ControlTemplate)e.OldValue; ControlTemplate newTemplate = target.Template; target.OnTemplateChanged(oldTemplate, newTemplate); }