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(); } }
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); }
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 }); }
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); } }
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)); } }
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)); }
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); } }
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); } }
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); }
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); } }
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(); } }
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)); }
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)); }
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)); } }
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; } } }
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)); }
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; } } }
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); } }
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)); } } }
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); }