/// <summary> /// Registers observers for property changes on the specified Brush. /// Note that skia implementation of this method should only be used for property observervation. /// </summary> internal static IDisposable AssignAndObserveBrush(Brush brush, Action <Color> colorSetter, Action imageBrushCallback = null) { if (brush == null) { colorSetter(SolidColorBrushHelper.Transparent.Color); return(null); } var disposables = new CompositeDisposable(); if (brush is SolidColorBrush colorBrush) { brush.RegisterDisposablePropertyChangedCallback( SolidColorBrush.ColorProperty, (s, colorArg) => colorSetter(SolidColorBrushHelper.Transparent.Color) ) .DisposeWith(disposables); brush.RegisterDisposablePropertyChangedCallback( SolidColorBrush.OpacityProperty, (s, colorArg) => colorSetter(SolidColorBrushHelper.Transparent.Color) ) .DisposeWith(disposables); } else if (brush is GradientBrush gradientBrush) { if (gradientBrush is LinearGradientBrush linearGradient) { gradientBrush.RegisterDisposablePropertyChangedCallback( LinearGradientBrush.StartPointProperty, (s, e) => colorSetter(SolidColorBrushHelper.Transparent.Color) ) .DisposeWith(disposables); gradientBrush.RegisterDisposablePropertyChangedCallback( LinearGradientBrush.EndPointProperty, (s, e) => colorSetter(SolidColorBrushHelper.Transparent.Color) ) .DisposeWith(disposables); } gradientBrush.RegisterDisposablePropertyChangedCallback( GradientBrush.GradientStopsProperty, (s, e) => colorSetter(SolidColorBrushHelper.Transparent.Color) ) .DisposeWith(disposables); gradientBrush.RegisterDisposablePropertyChangedCallback( GradientBrush.MappingModeProperty, (s, e) => colorSetter(SolidColorBrushHelper.Transparent.Color) ) .DisposeWith(disposables); gradientBrush.RegisterDisposablePropertyChangedCallback( GradientBrush.OpacityProperty, (s, e) => colorSetter(SolidColorBrushHelper.Transparent.Color) ) .DisposeWith(disposables); gradientBrush.RegisterDisposablePropertyChangedCallback( GradientBrush.SpreadMethodProperty, (s, e) => colorSetter(SolidColorBrushHelper.Transparent.Color) ) .DisposeWith(disposables); gradientBrush.RegisterDisposablePropertyChangedCallback( GradientBrush.RelativeTransformProperty, (s, e) => colorSetter(SolidColorBrushHelper.Transparent.Color) ) .DisposeWith(disposables); } //else if (b is ImageBrush imageBrush) //{ //} else if (brush is AcrylicBrush acrylicBrush) { acrylicBrush.RegisterDisposablePropertyChangedCallback( AcrylicBrush.FallbackColorProperty, (s, e) => colorSetter(SolidColorBrushHelper.Transparent.Color) ) .DisposeWith(disposables); acrylicBrush.RegisterDisposablePropertyChangedCallback( AcrylicBrush.OpacityProperty, (s, e) => colorSetter(SolidColorBrushHelper.Transparent.Color) ) .DisposeWith(disposables); } colorSetter(SolidColorBrushHelper.Transparent.Color); return(disposables); }