Пример #1
0
        public void Init(IVisualElementRenderer renderer, VisualElementRendererFlags flags = VisualElementRendererFlags.AutoPackage | VisualElementRendererFlags.AutoTrack)
        {
            _flags    = flags;
            _packager = new VisualElementPackager(renderer);
            _events   = new EventTracker(renderer);
            _tracker  = new VisualElementTracker(renderer);
            _tracker.NativeControlUpdated += OnNativeControlUpdated;

            if (AutoTrack)
            {
                if (renderer is UIView uiView)
                {
                    _events.LoadEvents(uiView);
                }
                else
                {
                    throw new InvalidRendererException("IVisualElementRenderer must be of type 'UIView'");
                }
            }

            if (AutoPackage)
            {
                _packager?.Load();
            }
        }
Пример #2
0
        public void SetElement(VisualElement element)
        {
            var oldElement = Element;

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

            Element = element;

            if (Element != null)
            {
                Element.PropertyChanged += HandlePropertyChanged;
            }

            this.RemoveAllSubviews();
            Tracker  = new VisualElementTracker(this);
            Packager = new VisualElementPackager(this);
            Packager.Load();
            var view = Element as XfxCardView;

            if (view == null)
            {
                return;
            }
            SetCardBackgroundColor();
            SetElevation();
            RaiseElementChanged(new VisualElementChangedEventArgs(oldElement, Element));
        }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            //var uiTapGestureRecognizer = new UITapGestureRecognizer(a => View.EndEditing(true));

            //uiTapGestureRecognizer.ShouldRecognizeSimultaneously = (recognizer, gestureRecognizer) => true;
            //uiTapGestureRecognizer.ShouldReceiveTouch = OnShouldReceiveTouch;
            //uiTapGestureRecognizer.DelaysTouchesBegan =
            //    uiTapGestureRecognizer.DelaysTouchesEnded = uiTapGestureRecognizer.CancelsTouchesInView = false;
            //View.AddGestureRecognizer(uiTapGestureRecognizer);

            UpdatedCurrentPage();

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

            Element.PropertyChanged += OnHandlePropertyChanged;
            _tracker = new VisualElementTracker(this);

            _events = new EventTracker(this);
            _events.LoadEvents(View);

            //Element.SendViewInitialized(View);
        }
Пример #4
0
        public void SetElement(VisualElement element)
        {
            var oldElement = Element;

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

            Element = element;
            if (Element != null)
            {
                //UpdateContent ();
                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.CornerRadius;

            SetCardBackgroundColor(TheView.BackgroundColor.ToAndroid());

            ElementChanged?.Invoke(this, new VisualElementChangedEventArgs(oldElement, Element));
        }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            UpdateDataSource();
            var uiTapGestureRecognizer = new UITapGestureRecognizer(a => View.EndEditing(true))
            {
                ShouldRecognizeSimultaneously = (recognizer, gestureRecognizer) => true,
                ShouldReceiveTouch            = OnShouldReceiveTouch
            };

            uiTapGestureRecognizer.DelaysTouchesBegan     =
                uiTapGestureRecognizer.DelaysTouchesEnded = uiTapGestureRecognizer.CancelsTouchesInView = false;
            View.AddGestureRecognizer(uiTapGestureRecognizer);

            UpdateBackground();

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

            Element.PropertyChanged += OnHandlePropertyChanged;
            _tracker = new VisualElementTracker(this);

            _events = new EventTracker(this);
            _events.LoadEvents(View);

            var sendViewInitialized = typeof(Xamarin.Forms.Forms).GetMethod("SendViewInitialized", BindingFlags.Static | BindingFlags.NonPublic);

            sendViewInitialized?.Invoke(Element, new object[] { Element, NativeView });
        }
Пример #6
0
        protected virtual void OnElementChanged(ElementChangedEventArgs <Frame> e)
        {
            ElementChanged?.Invoke(this, new VisualElementChangedEventArgs(e.OldElement, e.NewElement));

            if (e.OldElement != null)
            {
                e.OldElement.PropertyChanged -= OnElementPropertyChanged;
                UnsubscribeGestureRecognizers(e.OldElement);
            }

            if (e.NewElement != null)
            {
                if (_visualElementTracker == null)
                {
                    SetOnClickListener(this);
                    SetOnTouchListener(this);

                    UpdateGestureRecognizers(true);

                    _visualElementTracker  = new VisualElementTracker(this);
                    _visualElementPackager = new VisualElementPackager(this);
                    _visualElementPackager.Load();
                }

                e.NewElement.PropertyChanged += OnElementPropertyChanged;
                UpdateShadow();
                UpdateBackgroundColor();
                UpdateCornerRadius();
                SubscribeGestureRecognizers(e.NewElement);
            }
        }
Пример #7
0
        public void SetElement(TElement element)
        {
            var oldElement = Element;

            Element = element;

            if (oldElement != null)
            {
                oldElement.PropertyChanged -= _propertyChangedHandler;
            }

            if (element != null)
            {
                if (element.BackgroundColor != Color.Default || (oldElement != null && element.BackgroundColor != oldElement.BackgroundColor))
                {
                    SetBackgroundColor(element.BackgroundColor);
                }

                UpdateClipToBounds();

                if (_tracker == null)
                {
                    _tracker = new VisualElementTracker(this);
                    _tracker.NativeControlUpdated += (sender, e) => UpdateNativeWidget();
                }

                if (AutoPackage && _packager == null)
                {
                    _packager = new VisualElementPackager(this);
                    _packager.Load();
                }

                if (AutoTrack && _events == null)
                {
                    _events = new EventTracker(this);
                    _events.LoadEvents(this);
                }

                element.PropertyChanged += _propertyChangedHandler;
            }

            OnElementChanged(new ElementChangedEventArgs <TElement>(oldElement, element));

            if (element != null)
            {
                SendVisualElementInitialized(element, this);
            }

            EffectUtilities.RegisterEffectControlProvider(this, oldElement, element);

            if (Element != null && !string.IsNullOrEmpty(Element.AutomationId))
            {
                SetAutomationId(Element.AutomationId);
            }
#if __MOBILE__
            SetAccessibilityLabel();
            SetAccessibilityHint();
            SetIsAccessibilityElement();
#endif
        }
        public void SetElement(VisualElement element)
        {
            var oldElement = this.Element;

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

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

            ViewGroup.RemoveAllViews();
            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.CornerRadius;
            SetCardBackgroundColor(TheView.BackgroundColor.ToAndroid());

            if (ElementChanged != null)
            {
                ElementChanged(this, new VisualElementChangedEventArgs(oldElement, this.Element));
            }
        }
Пример #9
0
        protected virtual void OnChildAdded(VisualElement view)
        {
            if (_isDisposed)
            {
                return;
            }
            var reference = Guid.NewGuid().ToString();

            Performance.Start(reference);
            if (CompressedLayout.GetIsHeadless(view))
            {
                var packager = new VisualElementPackager(Renderer, view);
                view.IsPlatformEnabled = true;
                packager.Load();
            }
            else
            {
                var viewRenderer = Platform.CreateRenderer(view);
                Platform.SetRenderer(view, viewRenderer);

                var uiview = Renderer.NativeView;
                uiview.AddSubview(viewRenderer.NativeView);

                if (Renderer.ViewController != null && viewRenderer.ViewController != null)
                {
                    Renderer.ViewController.AddChildViewController(viewRenderer.ViewController);
                }

                EnsureChildrenOrder();
            }
            Performance.Stop(reference);
        }
        void IVisualElementRenderer.SetElement(VisualElement element)
        {
            var oldElement = Element;

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

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

            //sizes to match the forms view
            //updates properties, handles visual element properties
            Tracker  = new VisualElementTracker(this);
            Packager = new VisualElementPackager(this);
            Packager.Load();
            UseCompatPadding = true;

            _defaultElevation    = Elevation;
            _defaultCornerRadius = Radius;
            SetContentPadding();
            SetCardRadius();
            SetCardBackgroundColor();
            SetCardElevation();
            RaiseElementChanged(new VisualElementChangedEventArgs(oldElement, Element));
        }
Пример #11
0
        protected virtual void OnElementChanged(ElementChangedEventArgs <Frame> e)
        {
            ElementChanged?.Invoke(this, new VisualElementChangedEventArgs(e.OldElement, e.NewElement));

            if (e.OldElement != null)
            {
                e.OldElement.PropertyChanged -= OnElementPropertyChanged;
            }

            if (e.NewElement != null)
            {
                this.EnsureId();
                _backgroundDrawable = new GradientDrawable();
                _backgroundDrawable.SetShape(ShapeType.Rectangle);
                this.SetBackground(_backgroundDrawable);

                if (_visualElementTracker == null)
                {
                    _visualElementTracker  = new VisualElementTracker(this);
                    _visualElementPackager = new VisualElementPackager(this);
                    _visualElementPackager.Load();
                }

                e.NewElement.PropertyChanged += OnElementPropertyChanged;
                UpdateShadow();
                UpdateBackgroundColor();
                UpdateCornerRadius();
                UpdateBorderColor();
                UpdateClippedToBounds();

                ElevationHelper.SetElevation(this, e.NewElement);
            }
        }
Пример #12
0
        protected virtual void OnElementChanged(ElementChangedEventArgs <Frame> e)
        {
            ElementChanged?.Invoke(this, new VisualElementChangedEventArgs(e.OldElement, e.NewElement));

            if (e.OldElement != null)
            {
                e.OldElement.PropertyChanged -= OnElementPropertyChanged;
            }

            if (e.NewElement != null)
            {
                this.EnsureId();

                if (_visualElementTracker == null)
                {
                    _visualElementTracker  = new VisualElementTracker(this);
                    _visualElementPackager = new VisualElementPackager(this);
                    _visualElementPackager.Load();
                }

                e.NewElement.PropertyChanged += OnElementPropertyChanged;
                UpdateShadow();
                UpdateBackgroundColor();
                UpdateCornerRadius();

                ElevationHelper.SetElevation(this, e.NewElement);
            }
        }
Пример #13
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            if (NativeView == null)
            {
                return;
            }

            var uiTapGestureRecognizer = new UITapGestureRecognizer(a => NativeView?.EndEditing(true));

            uiTapGestureRecognizer.ShouldRecognizeSimultaneously = (recognizer, gestureRecognizer) => true;
            uiTapGestureRecognizer.ShouldReceiveTouch            = OnShouldReceiveTouch;
            uiTapGestureRecognizer.DelaysTouchesBegan            =
                uiTapGestureRecognizer.DelaysTouchesEnded        = uiTapGestureRecognizer.CancelsTouchesInView = false;
            NativeView.AddGestureRecognizer(uiTapGestureRecognizer);

            UpdateBackground();

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

            Element.PropertyChanged += OnHandlePropertyChanged;
            _tracker = new VisualElementTracker(this, !(Element.Parent is BaseShellItem));

            _events = new EventTracker(this);
            _events.LoadEvents(NativeView);

            Element.SendViewInitialized(NativeView);
        }
Пример #14
0
        public void SetElement(VisualElement element)
        {
            var oldElement = Element;

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

            if (element != null)
            {
                Element = element;
                Element.PropertyChanged += HandlePropertyChanged;

                if (_packager == null)
                {
                    WebView.EvalRequested += OnEvalRequested;
                    WebView.EvaluateJavaScriptRequested += OnEvaluateJavaScriptRequested;
                    WebView.GoBackRequested             += OnGoBackRequested;
                    WebView.GoForwardRequested          += OnGoForwardRequested;
                    WebView.ReloadRequested             += OnReloadRequested;
                    NavigationDelegate = new CustomWebViewNavigationDelegate(this);
                    UIDelegate         = new CustomWebViewUIDelegate();

                    BackgroundColor = UIColor.Clear;

                    AutosizesSubviews = true;

                    _tracker = new VisualElementTracker(this);

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

                    _events = new EventTracker(this);
                    _events.LoadEvents(this);
                }

                Load();
            }

            OnElementChanged(new VisualElementChangedEventArgs(oldElement, element));

            EffectUtilities.RegisterEffectControlProvider(this, oldElement, element);

            if (Element != null && !string.IsNullOrEmpty(Element.AutomationId))
            {
                AccessibilityIdentifier = Element.AutomationId;
            }

            if (element != null)
            {
                element.SendViewInitialized(this);
            }
        }
Пример #15
0
        public void Init(IVisualElementRenderer renderer, VisualElementRendererFlags flags = VisualElementRendererFlags.AutoPackage | VisualElementRendererFlags.AutoTrack)
        {
            _flags          = flags;
            _packager       = new VisualElementPackager(renderer);
            _tracker        = new VisualElementTracker(renderer);
            _gestureManager = new GestureManager(renderer);

            if (AutoPackage)
            {
                _packager?.Load();
            }
        }
Пример #16
0
        public void SetElement(VisualElement element)
        {
            _cardScheme?.Dispose();
            _cardScheme = CreateCardScheme();

            var oldElement = Element;

            if (oldElement != null)
            {
                oldElement.PropertyChanged -= OnElementPropertyChanged;
            }

            if (element is null)
            {
                Element = null;
            }
            else
            {
                Element = element as Frame ?? throw new ArgumentException("Element must be of type Frame.");
            }

            if (Element != null)
            {
                if (_packager == null)
                {
                    _defaultCardScheme = CreateCardScheme();

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

                    _tracker = new VisualElementTracker(this);

                    _events = new EventTracker(this);
                    _events.LoadEvents(this);
                }

                Element.PropertyChanged += OnElementPropertyChanged;

                ApplyTheme();
            }

            OnElementChanged(new VisualElementChangedEventArgs(oldElement, element));

            if (element != null)
            {
                element.SendViewInitialized(this);
            }

            if (!string.IsNullOrEmpty(element?.AutomationId))
            {
                AccessibilityIdentifier = element.AutomationId;
            }
        }
        void IVisualElementRenderer.SetElement(VisualElement element)
        {
            if (element == null)
            {
                throw new ArgumentNullException(nameof(element));
            }

            if (!(element is MediaElement))
            {
                throw new ArgumentException($"{nameof(element)} must be of type {nameof(MediaElement)}");
            }

            MediaElement oldElement = MediaElement;

            MediaElement = (MediaElement)element;

            if (oldElement != null)
            {
                oldElement.PropertyChanged   -= OnElementPropertyChanged;
                oldElement.SeekRequested     -= MediaElementSeekRequested;
                oldElement.StateRequested    -= MediaElementStateRequested;
                oldElement.PositionRequested -= MediaElementPositionRequested;
                oldElement.VolumeRequested   -= MediaElementVolumeRequested;
            }

            Color currentColor = oldElement?.BackgroundColor ?? Color.Default;

            if (element.BackgroundColor != currentColor)
            {
                UpdateBackgroundColor();
            }

            MediaElement.PropertyChanged   += OnElementPropertyChanged;
            MediaElement.SeekRequested     += MediaElementSeekRequested;
            MediaElement.StateRequested    += MediaElementStateRequested;
            MediaElement.PositionRequested += MediaElementPositionRequested;
            MediaElement.VolumeRequested   += MediaElementVolumeRequested;

            UpdateSource();
            VideoGravity = AspectToGravity(MediaElement.Aspect);

            _tracker = new VisualElementTracker(this);

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

            _events = new EventTracker(this);
            _events.LoadEvents(View);

            OnElementChanged(new VisualElementChangedEventArgs(oldElement, MediaElement));
        }
Пример #18
0
        public void SetElement(VisualElement element)
        {
            _cardScheme?.Dispose();
            _cardScheme = CreateCardScheme();

            var oldElement = Element;

            if (oldElement != null)
            {
                oldElement.PropertyChanged -= OnElementPropertyChanged;
            }

            if (element is null)
            {
                Element = null;
            }
            else
            {
                Element = element as Frame ?? throw new ArgumentException("Element must be of type Frame.");
            }

            if (Element != null)
            {
                if (_packager == null)
                {
                    _defaultCardScheme = CreateCardScheme();

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

                    _tracker = new VisualElementTracker(this);
                    _tracker.NativeControlUpdated += OnNativeControlUpdated;
                }

                Element.PropertyChanged += OnElementPropertyChanged;

                UpdateCornerRadius();
                UpdateBorderColor();
                UpdateBackgroundColor();

                ApplyTheme();
            }

            OnElementChanged(new VisualElementChangedEventArgs(oldElement, element));
        }
Пример #19
0
        public void SetElement(VisualElement element)
        {
            var oldElement = this.Element;

            //unregister old and re-register new
            if (oldElement != null)
            {
                oldElement.PropertyChanged -= HandlePropertyChanged;
            }

            this.Element = element;
            if (this.Element != null)
            {
                //this.SetBackgroundColor(this.Element.BackgroundColor.ToAndroid());
                BorderRendererVisual.UpdateBackground(BorderElement, this);
                UpdateContent();

                this.Element.PropertyChanged += HandlePropertyChanged;
            }

            if (!isInitialized)
            {
                isInitialized = true;
                //sizes to match the forms view
                //updates properties, handles visual element properties
                Tracker = new VisualElementTracker(this);

                //add and remove children automatically
                packager = new VisualElementPackager(this);
                packager.Load();

                //TODO: this is hardcoded for now via resources, but could be bindable.

                /*SetColorSchemeResources (Resource.Color.xam_dark_blue,
                 *  Resource.Color.xam_purple,
                 *  Resource.Color.xam_gray,
                 *  Resource.Color.xam_green);*/
            }

            if (ElementChanged != null)
            {
                ElementChanged(this, new VisualElementChangedEventArgs(oldElement, this.Element));
            }
        }
Пример #20
0
        void IVisualElementRenderer.SetElement(VisualElement element)
        {
            MediaElement oldElement = MediaElement;

            if (oldElement != null)
            {
                oldElement.PropertyChanged   -= OnElementPropertyChanged;
                oldElement.SeekRequested     -= MediaElementSeekRequested;
                oldElement.StateRequested    -= MediaElementStateRequested;
                oldElement.PositionRequested -= MediaElementPositionRequested;
                oldElement.VolumeRequested   -= MediaElementVolumeRequested;
            }

            MediaElement = (MediaElement)element;

            if (element != null)
            {
                Color currentColor = oldElement?.BackgroundColor ?? Color.Default;
                if (element.BackgroundColor != currentColor)
                {
                    UpdateBackgroundColor();
                }

                MediaElement.PropertyChanged   += OnElementPropertyChanged;
                MediaElement.SeekRequested     += MediaElementSeekRequested;
                MediaElement.StateRequested    += MediaElementStateRequested;
                MediaElement.PositionRequested += MediaElementPositionRequested;
                MediaElement.VolumeRequested   += MediaElementVolumeRequested;

                UpdateSource();
                VideoGravity = AspectToGravity(MediaElement.Aspect);

                _tracker = new VisualElementTracker(this);

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

                _events = new EventTracker(this);
                _events.LoadEvents(View);
            }

            OnElementChanged(new VisualElementChangedEventArgs(oldElement, element));
        }
        public void SetElement(VisualElement element)
        {
            _requestedScroll = null;
            var oldElement = Element;

            Element = element;

            if (oldElement != null)
            {
                oldElement.PropertyChanged -= HandlePropertyChanged;
                ((IScrollViewController)oldElement).ScrollToRequested -= OnScrollToRequested;
            }

            if (element != null)
            {
                element.PropertyChanged += HandlePropertyChanged;
                ((IScrollViewController)element).ScrollToRequested += OnScrollToRequested;
                if (_packager == null)
                {
                    DelaysContentTouches = true;

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

                    _tracker = new VisualElementTracker(this);
                    _events  = new EventTracker(this);
                    _events.LoadEvents(this);
                }

                UpdateContentSize();
                UpdateBackgroundColor();

                OnElementChanged(new VisualElementChangedEventArgs(oldElement, element));

                Custom.Helpers.RegisterEffectControlProvider(this, oldElement, element);

                if (!string.IsNullOrEmpty(element.AutomationId))
                {
                    AccessibilityIdentifier = element.AutomationId;
                }
            }
        }
Пример #22
0
        public void SetElement(VisualElement element)
        {
            var oldElement = Element;

            Element = element;

            if (oldElement != null)
            {
                oldElement.PropertyChanged -= OnElementPropertyChanged;
            }

            if (element != null)
            {
                element.PropertyChanged += OnElementPropertyChanged;
                if (_packager == null)
                {
                    _packager = new VisualElementPackager(this);
                    _packager.Load();

                    _tracker = new VisualElementTracker(this);
                    _tracker.NativeControlUpdated += OnNativeControlUpdated;
                    //_events = new EventTracker(this);
                    //	_events.LoadEvents(this);

                    //_insetTracker = new KeyboardInsetTracker(this, () => Window, insets => ContentInset = ScrollIndicatorInsets = insets, point =>
                    //{
                    //	var offset = ContentOffset;
                    //	offset.Y += point.Y;
                    //	SetContentOffset(offset, true);
                    //});
                }

                SetupLayer();
            }

            OnElementChanged(new VisualElementChangedEventArgs(oldElement, element));
        }
Пример #23
0
        public void SetElement(VisualElement element)
        {
            _requestedScroll = null;
            var oldElement = Element;

            Element = element;

            if (oldElement != null)
            {
                oldElement.PropertyChanged -= HandlePropertyChanged;
                ((ScrollView)oldElement).ScrollToRequested -= OnScrollToRequested;
            }

            if (element != null)
            {
                element.PropertyChanged += HandlePropertyChanged;
                ((ScrollView)element).ScrollToRequested += OnScrollToRequested;
                if (_packager == null)
                {
                    _packager = new VisualElementPackager(this);
                    _packager.Load();

                    _tracker = new VisualElementTracker(this);
                    _tracker.NativeControlUpdated += OnNativeControlUpdated;
                    _events = new EventTracker(this);
                    _events.LoadEvents(this);


                    _insetTracker = new KeyboardInsetTracker(this, () => Window, insets =>
                    {
                        ContentInset = ScrollIndicatorInsets = insets;
                    },
                                                             point =>
                    {
                        var offset = ContentOffset;
                        offset.Y  += point.Y;
                        SetContentOffset(offset, true);
                    }, this);
                }

                UpdateDelaysContentTouches();
                UpdateContentSize();
                UpdateBackgroundColor();
                UpdateBackground();
                UpdateIsEnabled();
                UpdateVerticalScrollBarVisibility();
                UpdateHorizontalScrollBarVisibility();

                OnElementChanged(new VisualElementChangedEventArgs(oldElement, element));

                EffectUtilities.RegisterEffectControlProvider(this, oldElement, element);

                if (element != null)
                {
                    element.SendViewInitialized(this);
                }

                if (!string.IsNullOrEmpty(element.AutomationId))
                {
                    AccessibilityIdentifier = element.AutomationId;
                }
            }
        }
Пример #24
0
		protected virtual void OnElementChanged(ElementChangedEventArgs<Frame> e)
		{
			ElementChanged?.Invoke(this, new VisualElementChangedEventArgs(e.OldElement, e.NewElement));

			if (e.OldElement != null)
			{
				e.OldElement.PropertyChanged -= OnElementPropertyChanged;
				UnsubscribeGestureRecognizers(e.OldElement);
			}

			if (e.NewElement != null)
			{
				if (_visualElementTracker == null)
				{
					SetOnClickListener(this);
					SetOnTouchListener(this);

					UpdateGestureRecognizers(true);

					_visualElementTracker = new VisualElementTracker(this);
					_visualElementPackager = new VisualElementPackager(this);
					_visualElementPackager.Load();
				}

				e.NewElement.PropertyChanged += OnElementPropertyChanged;
				UpdateShadow();
				UpdateBackgroundColor();
				SubscribeGestureRecognizers(e.NewElement);
			}
		}
Пример #25
0
        public void SetElement(VisualElement element)
        {
            var oldElement = this.Element;

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

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

                // ** fix any errors, make sure valid values **/
                if (SourceView.ShadowBorders == null)
                {
                    SourceView.ShadowBorders = new FrameRect();
                }

                if (SourceView.ShadowBorders.Top < 0)
                {
                    SourceView.ShadowBorders.Top = 0;
                }

                if (SourceView.ShadowBorders.Bottom < 0)
                {
                    SourceView.ShadowBorders.Bottom = 0;
                }

                if (SourceView.ShadowBorders.Right < 0)
                {
                    SourceView.ShadowBorders.Right = 0;
                }

                if (SourceView.ShadowBorders.Left < 0)
                {
                    SourceView.ShadowBorders.Left = 0;
                }

                // ** end error check **/

                // ** setbackground **/
                //var border2 = Android.App.Application.Context.Resources.GetDrawable (Resource.Drawable.FrameBorder, Android.App.Application.Context.Theme).GetConstantState().NewDrawable() as LayerDrawable;

                // prevent changes to other instances of the drawable
                var border2 = Android.App.Application.Context.Resources.GetDrawable(Resource.Drawable.FrameBorder1, Android.App.Application.Context.Theme).Mutate() as LayerDrawable;

                var shadowLayer = border2.FindDrawableByLayerId(Resource.Id.shadowLayer).Mutate() as GradientDrawable;
                shadowLayer.SetCornerRadius(SourceView.Radius);
                if (SourceView.HasShadow == false)
                {
                    // invisible
                    shadowLayer.Alpha = 0;
                    // no padding
                    border2.SetLayerInset(0, 0, 0, 0, 0);
                }
                else
                {
                    shadowLayer.SetStroke((int)SourceView.ShadowRadius, SourceView.ShadowColor.ToAndroid());
                    shadowLayer.SetCornerRadius(SourceView.Radius);
                }

                var BorderLayer = border2.FindDrawableByLayerId(Resource.Id.BorderLayer).Mutate() as GradientDrawable;
                BorderLayer.SetStroke(SourceView.StrokeThickness, SourceView.OutlineColor.ToAndroid());

                if (SourceView.StrokeType == StrokeType.Dashed)
                {
                    // dashes
                    BorderLayer.SetStroke(SourceView.StrokeThickness, SourceView.OutlineColor.ToAndroid(), 15, 10);
                }
                else if (SourceView.StrokeType == StrokeType.Dotted)
                {
                    // dots
                    BorderLayer.SetStroke(SourceView.StrokeThickness, SourceView.OutlineColor.ToAndroid(), 5, 4);
                }
                else
                {
                    BorderLayer.SetStroke(SourceView.StrokeThickness, SourceView.OutlineColor.ToAndroid());
                }

                BorderLayer.SetCornerRadius(SourceView.Radius);

                var MainLayer = border2.FindDrawableByLayerId(Resource.Id.MainLayer).Mutate() as GradientDrawable;
                MainLayer.SetColor(SourceView.BackgroundColor.ToAndroid());
                MainLayer.SetCornerRadius(SourceView.Radius);

                if (SourceView.HasShadow == false)
                {
                    border2.SetLayerInset(1, 0, 0, 0, 0);

                    //index, l,t,r,b
                    border2.SetLayerInset(2,
                                          SourceView.Borders.Left == 0 ? 0 : SourceView.StrokeThickness,
                                          SourceView.Borders.Top == 0 ? 0 : SourceView.StrokeThickness,
                                          SourceView.Borders.Right == 0 ? 0 : SourceView.StrokeThickness,
                                          SourceView.Borders.Bottom == 0 ? 0 : SourceView.StrokeThickness);
                }
                else
                {
                    // shadow layer. no padding
                    border2.SetLayerInset(0, 0, 0, 0, 0);

                    // border layer. padding=ShadowRadius, if border turned on
                    var rect = new Rect(
                        SourceView.ShadowBorders.Left == 0 ? 0 : (int)SourceView.ShadowRadius,
                        SourceView.ShadowBorders.Top == 0 ? 0 : (int)SourceView.ShadowRadius,
                        SourceView.ShadowBorders.Right == 0 ? 0 : (int)SourceView.ShadowRadius,
                        SourceView.ShadowBorders.Bottom == 0 ? 0 : (int)SourceView.ShadowRadius);

                    rect.Left   = rect.Left < 0 ? 0 : rect.Left;
                    rect.Top    = rect.Top < 0 ? 0 : rect.Top;
                    rect.Right  = rect.Right < 0 ? 0 : rect.Right;
                    rect.Bottom = rect.Bottom < 0 ? 0 : rect.Bottom;

                    border2.SetLayerInset(1, rect.Left, rect.Top, rect.Right, rect.Bottom);

                    // main layer indent shadowRadius + border size/
                    border2.SetLayerInset(2,
                                          SourceView.Borders.Left == 0 ? rect.Left : SourceView.StrokeThickness + rect.Left,
                                          SourceView.Borders.Top == 0 ? rect.Right  : SourceView.StrokeThickness + rect.Top,
                                          SourceView.Borders.Right == 0 ? rect.Top : SourceView.StrokeThickness + rect.Right,
                                          SourceView.Borders.Bottom == 0 ? rect.Bottom : SourceView.StrokeThickness + rect.Bottom);
                }
                this.Background = border2;

                // ** set padding **/
                this.SetPadding(
                    (int)SourceView.Padding.Left,
                    (int)SourceView.Padding.Top,
                    (int)SourceView.Padding.Right,
                    (int)SourceView.Padding.Bottom);


                ViewGroup.RemoveAllViews();
                Tracker = new VisualElementTracker(this);

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

                if (ElementChanged != null)
                {
                    ElementChanged(this, new VisualElementChangedEventArgs(oldElement, this.Element));
                }
            }
        }
Пример #26
0
        public void SetElement(TElement element)
        {
            var oldElement = Element;

            Element = element;

            Performance.Start(out string reference);

            if (oldElement != null)
            {
                oldElement.PropertyChanged -= _propertyChangedHandler;
            }

            if (element != null)
            {
                if (element.BackgroundColor != null || (oldElement != null && element.BackgroundColor != oldElement.BackgroundColor))
                {
                    SetBackgroundColor(element.BackgroundColor);
                }

                if (element.Background != null && (!element.Background.IsEmpty || (oldElement != null && element.Background != oldElement.Background)))
                {
                    SetBackground(element.Background);
                }

                UpdateClipToBounds();

                if (_tracker == null)
                {
                    _tracker = new VisualElementTracker(this);
                    _tracker.NativeControlUpdated += (sender, e) => UpdateNativeWidget();
                }

                if (AutoPackage && _packager == null)
                {
                    _packager = new VisualElementPackager(this);
                    _packager.Load();
                }


                // TODO MAUI AUTOTRACK?
                if (AutoTrack && _events == null)
                {
                    // _events = new EventTracker(this);
                    //_events.LoadEvents(this);
                }

                element.PropertyChanged += _propertyChangedHandler;
            }

            OnElementChanged(new ElementChangedEventArgs <TElement>(oldElement, element));

            if (element != null)
            {
                SendVisualElementInitialized(element, this);
            }

            EffectUtilities.RegisterEffectControlProvider(this, oldElement, element);

            if (Element != null && !string.IsNullOrEmpty(Element.AutomationId))
            {
                SetAutomationId(Element.AutomationId);
            }

            if (element != null)
            {
                SetAccessibilityLabel();
            }

            SetAccessibilityHint();
            SetIsAccessibilityElement();
            SetAccessibilityElementsHidden();
            Performance.Stop(reference);
        }