diff --git a/src/Avalonia.Controls/Primitives/ScrollBar.cs b/src/Avalonia.Controls/Primitives/ScrollBar.cs index 4d3ae3c5b8..982c1cdbfc 100644 --- a/src/Avalonia.Controls/Primitives/ScrollBar.cs +++ b/src/Avalonia.Controls/Primitives/ScrollBar.cs @@ -2,8 +2,6 @@ // Licensed under the MIT license. See licence.md file in the project root for full license information. using System; -using System.Reactive; -using System.Reactive.Linq; using Avalonia.Data; using Avalonia.Interactivity; using Avalonia.Input; @@ -57,6 +55,16 @@ namespace Avalonia.Controls.Primitives { Thumb.DragDeltaEvent.AddClassHandler((x, e) => x.OnThumbDragDelta(e), RoutingStrategies.Bubble); Thumb.DragCompletedEvent.AddClassHandler((x, e) => x.OnThumbDragComplete(e), RoutingStrategies.Bubble); + + static void AffectsIsVisible(AvaloniaProperty property) + { + property.Changed.AddClassHandler((x, e) => x.CalculateIsVisible()); + } + + AffectsIsVisible(MinimumProperty); + AffectsIsVisible(MaximumProperty); + AffectsIsVisible(ViewportSizeProperty); + AffectsIsVisible(VisibilityProperty); } /// @@ -64,13 +72,6 @@ namespace Avalonia.Controls.Primitives /// public ScrollBar() { - var isVisible = Observable.Merge( - this.GetObservable(MinimumProperty).Select(_ => Unit.Default), - this.GetObservable(MaximumProperty).Select(_ => Unit.Default), - this.GetObservable(ViewportSizeProperty).Select(_ => Unit.Default), - this.GetObservable(VisibilityProperty).Select(_ => Unit.Default)) - .Select(_ => CalculateIsVisible()); - this.Bind(IsVisibleProperty, isVisible, BindingPriority.Style); UpdatePseudoClasses(Orientation); } @@ -107,24 +108,18 @@ namespace Avalonia.Controls.Primitives /// /// Calculates whether the scrollbar should be visible. /// - /// The scrollbar's visibility. - private bool CalculateIsVisible() + private void CalculateIsVisible() { - switch (Visibility) + var isVisible = Visibility switch { - case ScrollBarVisibility.Visible: - return true; - - case ScrollBarVisibility.Disabled: - case ScrollBarVisibility.Hidden: - return false; - - case ScrollBarVisibility.Auto: - return double.IsNaN(ViewportSize) || Maximum > 0; - - default: - throw new InvalidOperationException("Invalid value for ScrollBar.Visibility."); - } + ScrollBarVisibility.Visible => true, + ScrollBarVisibility.Disabled => false, + ScrollBarVisibility.Hidden => false, + ScrollBarVisibility.Auto => (double.IsNaN(ViewportSize) || Maximum > 0), + _ => throw new InvalidOperationException("Invalid value for ScrollBar.Visibility.") + }; + + SetValue(IsVisibleProperty, isVisible, BindingPriority.Style); } protected override void OnKeyDown(KeyEventArgs e)