diff --git a/Perspex.Controls/Primitives/ScrollBar.cs b/Perspex.Controls/Primitives/ScrollBar.cs index 8c7d869531..75fd44c7eb 100644 --- a/Perspex.Controls/Primitives/ScrollBar.cs +++ b/Perspex.Controls/Primitives/ScrollBar.cs @@ -9,7 +9,6 @@ namespace Perspex.Controls.Primitives using System; using System.Reactive; using System.Reactive.Linq; - using Perspex.Controls.Templates; /// /// A scrollbar control. @@ -98,7 +97,7 @@ namespace Perspex.Controls.Primitives case ScrollBarVisibility.Auto: var viewportSize = this.ViewportSize; - return !double.IsNaN(viewportSize) && viewportSize < this.Maximum - this.Minimum; + return double.IsNaN(viewportSize) || viewportSize < this.Maximum - this.Minimum; default: throw new InvalidOperationException("Invalid value for ScrollBar.Visibility."); diff --git a/Tests/Perspex.Controls.UnitTests/Primitives/ScrollBarTests.cs b/Tests/Perspex.Controls.UnitTests/Primitives/ScrollBarTests.cs index 6d0e904427..9ad6299f40 100644 --- a/Tests/Perspex.Controls.UnitTests/Primitives/ScrollBarTests.cs +++ b/Tests/Perspex.Controls.UnitTests/Primitives/ScrollBarTests.cs @@ -61,6 +61,58 @@ namespace Perspex.Controls.UnitTests.Primitives Assert.Equal(target.Value, 50); } + [Fact] + public void ScrollBar_Can_AutoHide() + { + var target = new ScrollBar(); + + target.Visibility = ScrollBarVisibility.Auto; + target.Minimum = 0; + target.Maximum = 100; + target.ViewportSize = 100; + + Assert.False(target.IsVisible); + } + + [Fact] + public void ScrollBar_Should_Not_AutoHide_When_ViewportSize_Is_NaN() + { + var target = new ScrollBar(); + + target.Visibility = ScrollBarVisibility.Auto; + target.Minimum = 0; + target.Maximum = 100; + target.ViewportSize = double.NaN; + + Assert.True(target.IsVisible); + } + + [Fact] + public void ScrollBar_Should_Not_AutoHide_When_Visibility_Set_To_Visible() + { + var target = new ScrollBar(); + + target.Visibility = ScrollBarVisibility.Visible; + target.Minimum = 0; + target.Maximum = 100; + target.ViewportSize = 100; + + Assert.True(target.IsVisible); + } + + [Fact] + public void ScrollBar_Should_Hide_When_Visibility_Set_To_Hidden() + { + var target = new ScrollBar(); + + target.Visibility = ScrollBarVisibility.Hidden; + target.Minimum = 0; + target.Maximum = 100; + target.ViewportSize = 10; + + Assert.False(target.IsVisible); + } + private static Control Template(ScrollBar control) { return new Border