void AddChild(VisualElement view, IVisualElementRenderer oldRenderer = null, RendererPool pool = null, bool sameChildren = false)
        {
            var reference = Guid.NewGuid().ToString();

            Performance.Start(reference);

            if (CompressedLayout.GetIsHeadless(view))
            {
                var packager = new VisualElementPackager(_renderer, view);
                if (_childPackagers == null)
                {
                    _childPackagers = new Dictionary <BindableObject, VisualElementPackager>();
                }
                view.IsPlatformEnabled = true;
                packager.Load();

                _childPackagers[view] = packager;
            }
            else
            {
                if (_childViews == null)
                {
                    _childViews = new List <IVisualElementRenderer>();
                }

                IVisualElementRenderer renderer = oldRenderer;
                if (pool != null)
                {
                    renderer = pool.GetFreeRenderer(view);
                }
                if (renderer == null)
                {
                    Performance.Start(reference, "New renderer");
                    renderer = Platform.CreateRenderer(view, _renderer.View.Context);
                    Performance.Stop(reference, "New renderer");
                }

                if (renderer == oldRenderer)
                {
                    Platform.SetRenderer(renderer.Element, null);
                    renderer.SetElement(view);
                }

                Performance.Start(reference, "Set renderer");
                Platform.SetRenderer(view, renderer);
                Performance.Stop(reference, "Set renderer");

                Performance.Start(reference, "Add view");
                if (!sameChildren)
                {
                    (_renderer.View as ViewGroup)?.AddView(renderer.View);
                    _childViews.Add(renderer);
                }
                Performance.Stop(reference, "Add view");

                Performance.Stop(reference);
            }
        }
コード例 #2
0
        void AddChild(VisualElement view, IVisualElementRenderer oldRenderer = null, RendererPool pool = null, bool sameChildren = false)
        {
            Performance.Start();

            if (CompressedLayout.GetIsHeadless(view))
            {
                var packager = new VisualElementPackager(_renderer, view);
                view.IsPlatformEnabled = true;
                packager.Load();
            }
            else
            {
                if (_childViews == null)
                {
                    _childViews = new List <IVisualElementRenderer>();
                }

                IVisualElementRenderer renderer = oldRenderer;
                if (pool != null)
                {
                    renderer = pool.GetFreeRenderer(view);
                }
                if (renderer == null)
                {
                    Performance.Start("New renderer");
                    renderer = Platform.CreateRenderer(view);
                    Performance.Stop("New renderer");
                }

                if (renderer == oldRenderer)
                {
                    Platform.SetRenderer(renderer.Element, null);
                    renderer.SetElement(view);
                }

                Performance.Start("Set renderer");
                Platform.SetRenderer(view, renderer);
                Performance.Stop("Set renderer");

                Performance.Start("Add view");
                if (!sameChildren)
                {
                    (_renderer.View as ViewGroup)?.AddView(renderer.View);
                    _childViews.Add(renderer);
                }
                Performance.Stop("Add view");
            }
            Performance.Stop();
        }
コード例 #3
0
    public void SetElement (VisualElement element)
    {
      var oldElement = this.Element;

      if (oldElement != null)
        oldElement.PropertyChanged -= HandlePropertyChanged;

      this.Element = element;
      if (this.Element != null) {
        //UpdateContent ();
        this.Element.PropertyChanged += HandlePropertyChanged;
      }

      ViewGroup.RemoveAllViews ();
      //sizes to match the forms view
      //updates properties, handles visual element properties
      Tracker = new VisualElementTracker (this);

      Packager = new VisualElementPackager (this);
      Packager.Load ();

      UseCompatPadding = true;

      SetContentPadding ((int)TheView.Padding.Left, (int)TheView.Padding.Top,
        (int)TheView.Padding.Right, (int)TheView.Padding.Bottom);

      Radius = TheView.CornderRadius;
 
      this.SetCardBackgroundColor(TheView.BackgroundColor.ToAndroid ());
                
                

               
          

      if (ElementChanged != null)
        ElementChanged (this, new VisualElementChangedEventArgs (oldElement, this.Element));
    }
コード例 #4
0
 protected void SetPackager(VisualElementPackager packager)
 {
     _packager = packager;
     packager.Load();
 }