public void HandleSelectionMouseDown(IDesignPanel designPanel, MouseButtonEventArgs e, DesignPanelHitTestResult result) { if (e.ChangedButton == MouseButton.Left && MouseGestureBase.IsOnlyButtonPressed(e, MouseButton.Left)) { e.Handled = true; new RangeSelectionGesture(result.ModelHit).Start(designPanel, e); } }
/// <summary> /// Performs a hit test on the design surface, raising <paramref name="callback"/> for each match. /// Hit testing continues while the callback returns true. /// </summary> public void HitTest(Point mousePosition, bool testAdorners, bool testDesignSurface, Predicate<DesignPanelHitTestResult> callback, HitTestType hitTestType) { if (mousePosition.X < 0 || mousePosition.Y < 0 || mousePosition.X > this.RenderSize.Width || mousePosition.Y > this.RenderSize.Height) { return; } // First try hit-testing on the adorner layer. bool continueHitTest = true; HitTestFilterCallback filterBehavior = CustomHitTestFilterBehavior ?? (x => FilterHitTestInvisibleElements(x, hitTestType)); CustomHitTestFilterBehavior = null; if (testAdorners) { RunHitTest( _adornerLayer, mousePosition, filterBehavior, delegate(HitTestResult result) { if (result != null && result.VisualHit != null && result.VisualHit is Visual) { DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit); DependencyObject obj = result.VisualHit; while (obj != null && obj != _adornerLayer) { AdornerPanel adorner = obj as AdornerPanel; if (adorner != null) { customResult.AdornerHit = adorner; } obj = VisualTreeHelper.GetParent(obj); } continueHitTest = callback(customResult); return continueHitTest ? HitTestResultBehavior.Continue : HitTestResultBehavior.Stop; } else { return HitTestResultBehavior.Continue; } }); } if (continueHitTest && testDesignSurface) { RunHitTest( this.Child, mousePosition, filterBehavior, delegate(HitTestResult result) { if (result != null && result.VisualHit != null && result.VisualHit is Visual) { DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit); ViewService viewService = _context.Services.View; DependencyObject obj = result.VisualHit; while (obj != null) { if ((customResult.ModelHit = viewService.GetModel(obj)) != null) break; obj = VisualTreeHelper.GetParent(obj); } if (customResult.ModelHit == null) { customResult.ModelHit = _context.RootItem; } continueHitTest = callback(customResult); return continueHitTest ? HitTestResultBehavior.Continue : HitTestResultBehavior.Stop; } else { return HitTestResultBehavior.Continue; } } ); } }
void MouseUp(object sender,MouseEventArgs e) { result = designPanel.HitTest(e.GetPosition(designPanel), false, true); if (result.ModelHit == ExtendedItem && result.VisualHit is TextBlock && numClicks>0){ if (!isGettingDragged) { PlaceEditor(result.VisualHit, e); editor.Visibility = Visibility.Visible; } }else{ // Clicked outside the Text - > hide the editor and make the actualt text visible again editor.Visibility = Visibility.Hidden; if (textBlock != null) textBlock.Visibility = Visibility.Visible; } isMouseDown = false; isGettingDragged = false; }
void MouseMove(object sender, MouseEventArgs e) { Current += e.GetPosition(null) - Start; result = designPanel.HitTest(e.GetPosition(designPanel), false, true); if (result.ModelHit == ExtendedItem && result.VisualHit is TextBlock) { if (numClicks > 0) { if (isMouseDown && ((Current-Start).X > SystemParameters.MinimumHorizontalDragDistance || (Current-Start).Y > SystemParameters.MinimumVerticalDragDistance)) { isGettingDragged = true; editor.Focus(); } } DrawBorder((FrameworkElement) result.VisualHit); }else{ RemoveBorder(); } }
void MouseDown(object sender,MouseEventArgs e) { result = designPanel.HitTest(e.GetPosition(designPanel), false, true); if(result.ModelHit==ExtendedItem && result.VisualHit is TextBlock) { Start = Mouse.GetPosition(null); Current = Start; isMouseDown = true; } numClicks++; }
/// <summary> /// Performs a hit test on the design surface, raising <paramref name="callback"/> for each match. /// Hit testing continues while the callback returns true. /// </summary> public void HitTest(Point mousePosition, bool testAdorners, bool testDesignSurface, Predicate<DesignPanelHitTestResult> callback, HitTestType hitTestType) { if (mousePosition.X < 0 || mousePosition.Y < 0 || mousePosition.X > this.RenderSize.Width || mousePosition.Y > this.RenderSize.Height) { return; } // First try hit-testing on the adorner layer. bool continueHitTest = true; hitTestElements.Clear(); if (testAdorners) { RunHitTest( _adornerLayer, mousePosition, FilterHitTestInvisibleElements, delegate(HitTestResult result) { if (result != null && result.VisualHit != null && result.VisualHit is Visual) { DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit); DependencyObject obj = result.VisualHit; while (obj != null && obj != _adornerLayer) { AdornerPanel adorner = obj as AdornerPanel; if (adorner != null) { customResult.AdornerHit = adorner; } obj = VisualTreeHelper.GetParent(obj); } continueHitTest = callback(customResult); return continueHitTest ? HitTestResultBehavior.Continue : HitTestResultBehavior.Stop; } else { return HitTestResultBehavior.Continue; } }); } if (continueHitTest && testDesignSurface) { RunHitTest( this.Child, mousePosition, FilterHitTestInvisibleElements, delegate(HitTestResult result) { if (result != null && result.VisualHit != null && result.VisualHit is Visual) { DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit); ViewService viewService = _context.Services.View; DependencyObject obj = result.VisualHit; if (hitTestType == HitTestType.ElementSelection) { if (Keyboard.IsKeyDown(Key.LeftAlt)) if (lastElement != null && lastElement != _context.RootItem.Component && hitTestElements.Contains(lastElement)) { var idx = hitTestElements.IndexOf(lastElement) - 1; if (idx >= 0) obj = hitTestElements[idx]; } } while (obj != null) { if ((customResult.ModelHit = viewService.GetModel(obj)) != null) break; obj = VisualTreeHelper.GetParent(obj); } if (customResult.ModelHit == null) { customResult.ModelHit = _context.RootItem; } if (hitTestType == HitTestType.ElementSelection) { lastElement = obj; } continueHitTest = callback(customResult); return continueHitTest ? HitTestResultBehavior.Continue : HitTestResultBehavior.Stop; } else { return HitTestResultBehavior.Continue; } } ); } }
/// <summary> /// Performs a hit test on the design surface, raising <paramref name="callback"/> for each match. /// Hit testing continues while the callback returns true. /// </summary> public void HitTest(Point mousePosition, bool testAdorners, bool testDesignSurface, Predicate <DesignPanelHitTestResult> callback, HitTestType hitTestType) { if (mousePosition.X < 0 || mousePosition.Y < 0 || mousePosition.X > this.RenderSize.Width || mousePosition.Y > this.RenderSize.Height) { return; } // First try hit-testing on the adorner layer. bool continueHitTest = true; HitTestFilterCallback filterBehavior = CustomHitTestFilterBehavior ?? (x => FilterHitTestInvisibleElements(x, hitTestType)); CustomHitTestFilterBehavior = null; if (testAdorners) { RunHitTest( _adornerLayer, mousePosition, filterBehavior, delegate(HitTestResult result) { if (result != null && result.VisualHit != null && result.VisualHit is Visual) { DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit); DependencyObject obj = result.VisualHit; while (obj != null && obj != _adornerLayer) { AdornerPanel adorner = obj as AdornerPanel; if (adorner != null) { customResult.AdornerHit = adorner; } obj = VisualTreeHelper.GetParent(obj); } continueHitTest = callback(customResult); return(continueHitTest ? HitTestResultBehavior.Continue : HitTestResultBehavior.Stop); } else { return(HitTestResultBehavior.Continue); } }); } if (continueHitTest && testDesignSurface) { RunHitTest( this.Child, mousePosition, filterBehavior, delegate(HitTestResult result) { if (result != null && result.VisualHit != null && result.VisualHit is Visual) { DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit); ViewService viewService = _context.Services.View; DependencyObject obj = result.VisualHit; while (obj != null) { if ((customResult.ModelHit = viewService.GetModel(obj)) != null) { break; } obj = VisualTreeHelper.GetParent(obj); } if (customResult.ModelHit == null) { customResult.ModelHit = _context.RootItem; } continueHitTest = callback(customResult); return(continueHitTest ? HitTestResultBehavior.Continue : HitTestResultBehavior.Stop); } else { return(HitTestResultBehavior.Continue); } } ); } }
void designPanel_DragOver(object sender, DragEventArgs e) { try { IDesignPanel designPanel = (IDesignPanel)sender; e.Effects = DragDropEffects.Copy; e.Handled = true; Point p = e.GetPosition(designPanel); if (moveLogic == null) { if (e.Data.GetData(this.GetType()) != this) { return; } // TODO: dropLayer in designPanel designPanel.IsAdornerLayerHitTestVisible = false; DesignPanelHitTestResult result = designPanel.HitTest(p, false, true, HitTestType.Default); if (result.ModelHit != null) { designPanel.Focus(); var items = CreateItemsWithPosition(designPanel.Context, e.GetPosition(result.ModelHit.View)); if (items != null) { if (AddItemsWithDefaultSize(result.ModelHit, items)) { moveLogic = new MoveLogic(items[0]); foreach (var designItem in items) { if (designPanel.Context.Services.Component is XamlComponentService) { ((XamlComponentService)designPanel.Context.Services.Component).RaiseComponentRegisteredAndAddedToContainer(designItem); } } createPoint = p; // We'll keep the ChangeGroup open as long as the moveLogic is active. } else { // Abort the ChangeGroup created by the CreateItem() call. ChangeGroup.Abort(); } } else { DesignItem createdItem = CreateItemWithPosition(designPanel.Context, e.GetPosition(result.ModelHit.View)); if (AddItemsWithDefaultSize(result.ModelHit, new[] { createdItem })) { moveLogic = new MoveLogic(createdItem); if (designPanel.Context.Services.Component is XamlComponentService) { ((XamlComponentService)designPanel.Context.Services.Component).RaiseComponentRegisteredAndAddedToContainer(createdItem); } createPoint = p; // We'll keep the ChangeGroup open as long as the moveLogic is active. } else { // Abort the ChangeGroup created by the CreateItem() call. ChangeGroup.Abort(); } } } } else if ((moveLogic.ClickedOn.View as FrameworkElement).IsLoaded) { if (moveLogic.Operation == null) { moveLogic.Start(createPoint); } else { moveLogic.Move(p); } } } catch (Exception x) { DragDropExceptionHandler.RaiseUnhandledException(x); } }
void MouseUp(object sender, MouseEventArgs e) { result = designPanel.HitTest(e.GetPosition(designPanel), true, true, HitTestType.Default); if (((result.ModelHit == ExtendedItem && result.VisualHit is TextBlock) || (result.VisualHit != null && result.VisualHit.TryFindParent<InPlaceEditor>() == editor)) && numClicks > 0) { if (!isGettingDragged) { PlaceEditor(ExtendedItem.View, e); foreach (var extension in ExtendedItem.Extensions) { if (!(extension is InPlaceEditorExtension) && !(extension is SelectedElementRectangleExtension)) { ExtendedItem.RemoveExtension(extension); } } editor.Visibility = Visibility.Visible; } } else { // Clicked outside the Text - > hide the editor and make the actualt text visible again editor.Visibility = Visibility.Hidden; if (textBlock != null) { textBlock.Visibility = Visibility.Visible; } this.ExtendedItem.ReapplyAllExtensions(); } isMouseDown = false; isGettingDragged = false; }
public new void HandleSelectionMouseDown(IDesignPanel designPanel, MouseButtonEventArgs e, DesignPanelHitTestResult result) { if (e.ChangedButton == MouseButton.Left && MouseGestureBase.IsOnlyButtonPressed(e, MouseButton.Left)) { e.Handled = true; new PartialRangeSelectionGesture(result.ModelHit).Start(designPanel, e); } }
/// <summary> /// Performs a hit test on the design surface, raising <paramref name="callback"/> for each match. /// Hit testing continues while the callback returns true. /// </summary> public void HitTest(Point mousePosition, bool testAdorners, bool testDesignSurface, Predicate <DesignPanelHitTestResult> callback, HitTestType hitTestType) { if (mousePosition.X < 0 || mousePosition.Y < 0 || mousePosition.X > this.RenderSize.Width || mousePosition.Y > this.RenderSize.Height) { return; } // First try hit-testing on the adorner layer. bool continueHitTest = true; HitTestFilterCallback filterBehavior = CustomHitTestFilterBehavior ?? FilterHitTestInvisibleElements; CustomHitTestFilterBehavior = null; hitTestElements.Clear(); if (testAdorners) { RunHitTest( _adornerLayer, mousePosition, filterBehavior, delegate(HitTestResult result) { if (result != null && result.VisualHit != null && result.VisualHit is Visual) { DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit); DependencyObject obj = result.VisualHit; while (obj != null && obj != _adornerLayer) { AdornerPanel adorner = obj as AdornerPanel; if (adorner != null) { customResult.AdornerHit = adorner; } obj = VisualTreeHelper.GetParent(obj); } continueHitTest = callback(customResult); return(continueHitTest ? HitTestResultBehavior.Continue : HitTestResultBehavior.Stop); } else { return(HitTestResultBehavior.Continue); } }); } if (continueHitTest && testDesignSurface) { RunHitTest( this.Child, mousePosition, filterBehavior, delegate(HitTestResult result) { if (result != null && result.VisualHit != null && result.VisualHit is Visual) { DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit); ViewService viewService = _context.Services.View; DependencyObject obj = result.VisualHit; if (hitTestType == HitTestType.ElementSelection) { if (Keyboard.IsKeyDown(Key.LeftAlt)) { if (lastElement != null && lastElement != _context.RootItem.Component && hitTestElements.Contains(lastElement)) { var idx = hitTestElements.IndexOf(lastElement) - 1; if (idx >= 0) { obj = hitTestElements[idx]; } } } } while (obj != null) { if ((customResult.ModelHit = viewService.GetModel(obj)) != null) { break; } obj = VisualTreeHelper.GetParent(obj); } if (customResult.ModelHit == null) { customResult.ModelHit = _context.RootItem; } if (hitTestType == HitTestType.ElementSelection) { lastElement = obj; } continueHitTest = callback(customResult); return(continueHitTest ? HitTestResultBehavior.Continue : HitTestResultBehavior.Stop); } else { return(HitTestResultBehavior.Continue); } } ); } }