protected override Size ArrangeOverride(Size arrangeSize) { Performance.StartTiming(PerformanceMarks.AdornerArrange); if (VisualTreeHelper.GetParent((DependencyObject)this) != null) { if (this._needEvaluateLayout) { this._needEvaluateLayout = false; this._evaluateLayoutList = (List <UIElement>)null; this.EvaluateLayout(); } else if (this._evaluateLayoutList != null) { List <UIElement> list = this._evaluateLayoutList; this._evaluateLayoutList = (List <UIElement>)null; DesignerView currentDesignerView = this.CurrentDesignerView; foreach (UIElement adorner in list) { AdornerProperties.GetLayout((DependencyObject)adorner).EvaluateLayout(currentDesignerView, adorner); } } foreach (UIElement adorner in this.InternalChildren) { AdornerProperties.GetLayout((DependencyObject)adorner).Arrange(adorner); } } Performance.StopTiming(PerformanceMarks.AdornerArrange); return(arrangeSize); }
public override bool EvaluateLayout(DesignerView view, UIElement adorner) { if (view == null) { throw new ArgumentNullException("view"); } if (adorner == null) { throw new ArgumentNullException("adorner"); } BaseAdornerLayout.GetCache((DependencyObject)adorner).DesignerView = view; BaseAdornerLayout.EnsureActualValues((DependencyObject)adorner); ViewItem element = AdornerProperties.GetView((DependencyObject)adorner); if (BaseAdornerLayout.IsAdornableElement(view, element)) { object obj = adorner.ReadLocalValue(BaseAdornerLayout.OriginalVisibilityProperty); if (obj != DependencyProperty.UnsetValue) { adorner.SetValue(UIElement.VisibilityProperty, obj); adorner.ClearValue(BaseAdornerLayout.OriginalVisibilityProperty); } } else { if (element != (ViewItem)null && adorner.ReadLocalValue(BaseAdornerLayout.OriginalVisibilityProperty) == DependencyProperty.UnsetValue) { adorner.SetValue(BaseAdornerLayout.OriginalVisibilityProperty, (object)adorner.Visibility); adorner.Visibility = Visibility.Collapsed; } element = (ViewItem)null; } BaseAdornerLayout.CheckAndInvalidateAdorner(view, element, adorner); return(true); }
private void EvaluateLayout() { if (this.Visibility != Visibility.Collapsed && this._hasRendered) { if (this.VisualChildrenCount <= 0 || this.CurrentDesignerView == null) { return; } List <UIElement> list = (List <UIElement>)null; foreach (UIElement adorner in this.InternalChildren) { if (!AdornerProperties.GetLayout((DependencyObject)adorner).EvaluateLayout(this.CurrentDesignerView, adorner)) { if (list == null) { list = new List <UIElement>(); } list.Add(adorner); } } if (list == null) { return; } foreach (UIElement element in list) { this.InternalChildren.Remove(element); } } else { this._needEvaluateLayout = true; } }
internal void OnLayoutChanged(UIElement adorner) { if (VisualTreeHelper.GetParent((DependencyObject)this) == null) { return; } AdornerProperties.GetLayout((DependencyObject)adorner).EvaluateLayout(this.CurrentDesignerView, adorner); this.InvalidateArrange(); }
protected virtual AdornerPanel CreateAdornerPanel() { AdornerPanel panel = new AdornerPanel(); panel.IsContentFocusable = true; AdornerProperties.SetOrder(panel, AdornerOrder.Foreground); Adorners.Add(panel); return(panel); }
public override bool IsAssociated(UIElement adorner, ModelItem item) { if (adorner == null) { throw new ArgumentNullException("adorner"); } if (item == null) { throw new ArgumentNullException("item"); } return(AdornerProperties.GetModel((DependencyObject)adorner) == item); }
protected override Size MeasureOverride(Size constraint) { Performance.StartTiming(PerformanceMarks.AdornerMeasure); if (VisualTreeHelper.GetParent((DependencyObject)this) != null) { foreach (UIElement adorner in this.InternalChildren) { AdornerProperties.GetLayout((DependencyObject)adorner).Measure(adorner, constraint); } } Performance.StopTiming(PerformanceMarks.AdornerMeasure); return(new Size()); }
private void OnLoaded(object sender, RoutedEventArgs e) { _adorner = new ControlAdorner(AssociatedObject, AdornerTemplate.LoadContent() as FrameworkElement, AssociatedObject?.DataContext, AdornerProperties.GetAdornerContext(this)); _adorner.Margin = new Thickness(-6, 0, -6, 0); HideAdorner(); Application.Current.MainWindow.PreviewMouseLeftButtonDown += OnPreviewMouseDown; Application.Current.MainWindow.PreviewMouseLeftButtonUp += OnPreviewMouseUp; Application.Current.MainWindow.PreviewMouseMove += OnPreviewMouseMove; if (MouseEvent == OverlookMouseBehavior.OnMouseOverAndCtrl) { Application.Current.MainWindow.PreviewKeyDown += OnPreviewKeyDown; } }
protected override List <AutomationPeer> GetChildrenCore() { List <AutomationPeer> list1 = new List <AutomationPeer>(); List <UIElement> list2 = new List <UIElement>(); ICollection <UIElement> adorners = this._view.Adorners; if (adorners != null) { foreach (UIElement uiElement1 in new List <UIElement>((IEnumerable <UIElement>)adorners)) { ModelItem model = AdornerProperties.GetModel((DependencyObject)uiElement1); if (model == this._item) { Panel panel = uiElement1 as Panel; if (panel != null) { foreach (UIElement uiElement2 in panel.Children) { list2.Add(uiElement2); } } else { list2.Add(uiElement1); } } else if (model == null) { Panel panel = uiElement1 as Panel; if (panel != null) { foreach (UIElement uiElement2 in panel.Children) { if (AdornerProperties.GetModel((DependencyObject)uiElement2) == this._item) { list2.Add(uiElement2); } } } } } } if (list2.Count > 0) { list1.Add((AutomationPeer) new AdornerNodeAutomationPeer(list2)); } this.PopulateDataChildren(list1); return(list1); }
private void InsertAdornerIntoVisualTree(UIElement adorner) { int index = 0; AdornerOrder order1 = AdornerProperties.GetOrder((DependencyObject)adorner); foreach (DependencyObject adorner1 in this.InternalChildren) { AdornerOrder order2 = AdornerProperties.GetOrder(adorner1); if (order1.CompareTo((OrderToken)order2) <= 0) { ++index; } else { break; } } this.InternalChildren.Insert(index, adorner); }
private void SetupTransform(UIElement adorner) { BaseAdornerLayout.LayoutCache cache = BaseAdornerLayout.GetCache((DependencyObject)adorner); CanonicalTransform canonicalTransform1 = new CanonicalTransform(cache.ElementToDesignerViewTransformMatrix); CanonicalTransform canonicalTransform2 = new CanonicalTransform(cache.DesignerViewToViewportMatrix); Vector vector = VectorUtilities.Scale(canonicalTransform1.Scale, canonicalTransform2.Scale); adorner.SetValue(TransformAwareAdornerLayout.DesignerElementScalingFactorWithZoom, (object)vector); CanonicalTransform canonicalTransform3 = new CanonicalTransform(canonicalTransform1); canonicalTransform3.Scale = VectorUtilities.Unscale(new Vector((double)Math.Sign(vector.X), (double)Math.Sign(vector.Y)), canonicalTransform2.Scale); AdornerPanel adornerPanel = adorner as AdornerPanel; if (adornerPanel != null) { if (!adornerPanel.UseMirrorTransform) { canonicalTransform3.Scale = VectorUtilities.Unscale(new Vector(1.0, 1.0), canonicalTransform2.Scale); } else { adornerPanel.IsMirroredTransform = vector.X < 0.0; } } Transform renderTransform = AdornerProperties.GetRenderTransform((DependencyObject)adorner); Transform transform = (Transform)canonicalTransform3.ToTransform(); if (renderTransform != null) { transform = (Transform) new TransformGroup() { Children = { transform, renderTransform } } } ; adorner.RenderTransform = transform; }
void pinAdorner_MouseUp(object sender, MouseButtonEventArgs e) { var pinAdorner = sender as PinAdorner; if (pinAdorner.HitPin != null) { LinkableControl targetObject = pinAdorner.HitLinkableControl; LinkPin lp1 = pinAdorner.SourcePin; LinkPin lp2 = pinAdorner.HitPin; ConnectInfo info1 = lp1.GetInfo(); ConnectInfo info2 = lp2.GetInfo(); LinkLine line = new LinkLine(info1, info2); //Panel.SetZIndex(line, designCanvas.Children.Count); Binding bi1 = new Binding(omap[info1.Orient]); bi1.ElementName = designObject.Name; line.SetBinding(LinkLine.OriginInfoProperty, bi1); Binding bi2 = new Binding(omap[info2.Orient]); bi2.ElementName = targetObject.Name; line.SetBinding(LinkLine.TargetInfoProperty, bi2); var CanvasModelItem = AdornerProperties.GetModel(adorner).Parent; ModelItemCollection myControls = CanvasModelItem.Properties["Children"].Collection; ModelItem myLinkLine = myControls.Add(line); } if (pinAdorner.HitLinkableControl != null) { pinAdorner.HitLinkableControl.IsLinkDragOver = false; } hitPin = null; if (adorner.IsMouseCaptured) { adorner.ReleaseMouseCapture(); } _panel.Children.Remove(pinAdorner); }
private static void EnsureActualValues(DependencyObject adorner) { ViewItem view = AdornerProperties.GetView(adorner); ModelItem model = AdornerProperties.GetModel(adorner); BaseAdornerLayout.LayoutCache cache = BaseAdornerLayout.GetCache(adorner); if (cache.Model == model && !(cache.View != view)) { return; } if (cache.Model != null) { cache.Model.PropertyChanged -= new PropertyChangedEventHandler(BaseAdornerLayout.OnModelItemPropertyChanged); } cache.Model = model; cache.View = view; if (model == null) { return; } model.PropertyChanged += new PropertyChangedEventHandler(BaseAdornerLayout.OnModelItemPropertyChanged); }
public override void Arrange(UIElement adorner) { BaseAdornerLayout.LayoutCache cache = BaseAdornerLayout.GetCache((DependencyObject)adorner); Matrix m1_1 = cache.ElementToDesignerViewTransformMatrix; Matrix m1_2 = cache.DesignerViewToViewportMatrix; if (!MathUtilities.AreClose(m1_1, cache.ElementToDesignerViewTransformMatrix) || !MathUtilities.AreClose(m1_2, cache.DesignerViewToViewportMatrix)) { this.SetupTransform(adorner); } Vector scale = (Vector)adorner.GetValue(TransformAwareAdornerLayout.DesignerElementScalingFactorWithZoom); ViewItem view = AdornerProperties.GetView((DependencyObject)adorner); this.SetAdornerBounds(adorner, view, new Point(0.0, 0.0), scale); if (!(view != (ViewItem)null) || cache.PlatformObjectHashCode == 0 || cache.PlatformObjectHashCode == view.PlatformObject.GetHashCode()) { return; } cache.View = view; cache.RenderSize = view.RenderSize; cache.PlatformObjectHashCode = view.PlatformObject.GetHashCode(); }