Пример #1
0
 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);
 }
Пример #2
0
        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);
        }
Пример #3
0
 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;
     }
 }
Пример #4
0
 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);
        }
Пример #6
0
 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);
 }
Пример #7
0
 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);
        }
Пример #10
0
        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;
        }
Пример #12
0
        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);
        }
Пример #13
0
        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();
        }