protected virtual void Dispose(bool disposing) { if (!_disposed) { if (disposing) { _backgroundDrawable?.Dispose(); _backgroundDrawable = null; _defaultDrawable?.Dispose(); _defaultDrawable = null; _rippleDrawable?.Dispose(); _rippleDrawable = null; if (BorderElement != null) { BorderElement.PropertyChanged -= BorderElementPropertyChanged; BorderElement = null; } if (_renderer != null) { _renderer.ElementChanged -= OnElementChanged; _renderer = null; } } _disposed = true; } }
public static void UpdateBorder(IVisualNativeElementRenderer renderer, IBorderController backgroundView) { var control = renderer.Control; var ImageButton = backgroundView; if (control == null) { return; } if (ImageButton.BorderColor != Color.Default) { control.Layer.BorderColor = ImageButton.BorderColor.ToCGColor(); } control.Layer.BorderWidth = Math.Max(0f, (float)ImageButton.BorderWidth); nfloat cornerRadius = _defaultCornerRadius; if (ImageButton.IsSet(ImageButton.CornerRadiusProperty) && ImageButton.CornerRadius != (int)ImageButton.CornerRadiusProperty.DefaultValue) { cornerRadius = ImageButton.CornerRadius; } control.Layer.CornerRadius = cornerRadius; }
static void OnControlChanged(object sender, EventArgs e) { IVisualNativeElementRenderer renderer = (IVisualNativeElementRenderer)sender; IBorderController backgroundView = (IBorderController)renderer.Element; UpdateBorder(renderer, backgroundView); }
static void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { IVisualNativeElementRenderer renderer = (IVisualNativeElementRenderer)sender; IBorderController backgroundView = (IBorderController)renderer.Element; if (e.PropertyName == backgroundView.BorderWidthProperty.PropertyName || e.PropertyName == backgroundView.CornerRadiusProperty.PropertyName || e.PropertyName == backgroundView.BorderColorProperty.PropertyName) { UpdateBorder(renderer, backgroundView); } }