Browse Source

Removed Scrollbar binding workaround.

Binding system now handles this. Added unit tests to ensure it works
property.
pull/63/head
Steven Kirk 11 years ago
parent
commit
c453ad3b36
  1. 15
      Perspex.Controls/Primitives/ScrollBar.cs
  2. 9
      Perspex.Themes.Default/ScrollBarStyle.cs
  3. 1
      Tests/Perspex.Controls.UnitTests/Perspex.Controls.UnitTests.csproj
  4. 2
      Tests/Perspex.Controls.UnitTests/Primitives/RangeBaseTests.cs
  5. 92
      Tests/Perspex.Controls.UnitTests/Primitives/ScrollBarTests.cs

15
Perspex.Controls/Primitives/ScrollBar.cs

@ -82,21 +82,6 @@ namespace Perspex.Controls.Primitives
return base.MeasureOverride(availableSize);
}
/// <inheritdoc/>
protected override void OnTemplateApplied()
{
base.OnTemplateApplied();
// Binding between this.Value and track.Value must be done explicitly like this rather
// than using standard bindings as it shouldn't be able to to be overridden by binding
// e.g. ScrollBar.Value.
// TODO: This is probably no longer true. Test and use a standard 2 way binding if
// possible.
var track = this.GetTemplateChild<Track>("track");
track.GetObservable(ValueProperty).Subscribe(x => this.Value = x);
this.GetObservable(ValueProperty).Subscribe(x => track.Value = x);
}
/// <summary>
/// Calculates whether the scrollbar should be visible.
/// </summary>

9
Perspex.Themes.Default/ScrollBarStyle.cs

@ -67,10 +67,11 @@ namespace Perspex.Themes.Default
Child = new Track
{
Name = "track",
[~Track.MinimumProperty] = control[~ScrollBar.MinimumProperty],
[~Track.MaximumProperty] = control[~ScrollBar.MaximumProperty],
[~Track.ViewportSizeProperty] = control[~ScrollBar.ViewportSizeProperty],
[~Track.OrientationProperty] = control[~ScrollBar.OrientationProperty],
[!Track.MinimumProperty] = control[!ScrollBar.MinimumProperty],
[!Track.MaximumProperty] = control[!ScrollBar.MaximumProperty],
[!!Track.ValueProperty] = control[!!ScrollBar.ValueProperty],
[!Track.ViewportSizeProperty] = control[!ScrollBar.ViewportSizeProperty],
[!Track.OrientationProperty] = control[!ScrollBar.OrientationProperty],
Thumb = new Thumb
{
Name = "thumb",

1
Tests/Perspex.Controls.UnitTests/Perspex.Controls.UnitTests.csproj

@ -96,6 +96,7 @@
<Compile Include="DropDownTests.cs" />
<Compile Include="Presenters\ItemsPresenterTests.cs" />
<Compile Include="Presenters\ScrollContentPresenterTests.cs" />
<Compile Include="Primitives\ScrollBarTests.cs" />
<Compile Include="Primitives\RangeBaseTests.cs" />
<Compile Include="ScrollViewerTests.cs" />
<Compile Include="Primitives\SelectingItemsControlTests.cs" />

2
Tests/Perspex.Controls.UnitTests/Primitives/RangeBaseTests.cs

@ -6,8 +6,8 @@
namespace Perspex.Controls.UnitTests.Primitives
{
using Perspex.Controls.Primitives;
using System;
using Perspex.Controls.Primitives;
using Xunit;
public class RangeBaseTests

92
Tests/Perspex.Controls.UnitTests/Primitives/ScrollBarTests.cs

@ -0,0 +1,92 @@
// -----------------------------------------------------------------------
// <copyright file="ScrollBarTests.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Controls.UnitTests.Primitives
{
using System;
using Perspex.Controls.Primitives;
using Perspex.Controls.Templates;
using Perspex.Media;
using Xunit;
public class ScrollBarTests
{
[Fact]
public void Setting_Value_Should_Update_Track_Value()
{
var target = new ScrollBar
{
Template = ControlTemplate.Create<ScrollBar>(Template),
};
target.ApplyTemplate();
var track = target.GetTemplateChild<Track>("track");
target.Value = 50;
Assert.Equal(track.Value, 50);
}
[Fact]
public void Setting_Track_Value_Should_Update_Value()
{
var target = new ScrollBar
{
Template = ControlTemplate.Create<ScrollBar>(Template),
};
target.ApplyTemplate();
var track = target.GetTemplateChild<Track>("track");
track.Value = 50;
Assert.Equal(target.Value, 50);
}
[Fact]
public void Setting_Track_Value_After_Setting_Value_Should_Update_Value()
{
var target = new ScrollBar
{
Template = ControlTemplate.Create<ScrollBar>(Template),
};
target.ApplyTemplate();
var track = target.GetTemplateChild<Track>("track");
target.Value = 25;
track.Value = 50;
Assert.Equal(target.Value, 50);
}
private static Control Template(ScrollBar control)
{
return new Border
{
Child = new Track
{
Name = "track",
[!Track.MinimumProperty] = control[!ScrollBar.MinimumProperty],
[!Track.MaximumProperty] = control[!ScrollBar.MaximumProperty],
[!!Track.ValueProperty] = control[!!ScrollBar.ValueProperty],
[!Track.ViewportSizeProperty] = control[!ScrollBar.ViewportSizeProperty],
[!Track.OrientationProperty] = control[!ScrollBar.OrientationProperty],
Thumb = new Thumb
{
Template = ControlTemplate.Create<Thumb>(ThumbTemplate),
},
},
};
}
private static Control ThumbTemplate(Thumb control)
{
return new Border
{
Background = Brushes.Gray,
};
}
}
}
Loading…
Cancel
Save