Browse Source

Fix ScrollBar.Value.

Wasn't being updated inside ListBox and this is why...
pull/58/head
Steven Kirk 12 years ago
parent
commit
bf9071dcd0
  1. 13
      Perspex.Controls/Primitives/ScrollBar.cs
  2. 2
      Perspex.Themes.Default/ScrollBarStyle.cs
  3. 16
      Perspex.Themes.Default/ScrollViewerStyle.cs

13
Perspex.Controls/Primitives/ScrollBar.cs

@ -9,6 +9,7 @@ namespace Perspex.Controls.Primitives
using System;
using System.Reactive;
using System.Reactive.Linq;
using Perspex.Controls.Templates;
public class ScrollBar : TemplatedControl
{
@ -88,6 +89,18 @@ namespace Perspex.Controls.Primitives
return base.MeasureOverride(availableSize);
}
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.
var track = this.GetTemplateChild<Track>("track");
track.GetObservable(ValueProperty).Subscribe(x => this.Value = x);
this.GetObservable(ValueProperty).Subscribe(x => track.Value = x);
}
private bool CalculateIsVisible()
{
switch (this.Visibility)

2
Perspex.Themes.Default/ScrollBarStyle.cs

@ -66,9 +66,9 @@ namespace Perspex.Themes.Default
Background = Brushes.Silver,
Content = new Track
{
Id = "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

16
Perspex.Themes.Default/ScrollViewerStyle.cs

@ -31,7 +31,9 @@ namespace Perspex.Themes.Default
private Control Template(ScrollViewer control)
{
return new Grid
ScrollBar vert;
var result = new Grid
{
ColumnDefinitions = new ColumnDefinitions
{
@ -59,23 +61,27 @@ namespace Perspex.Themes.Default
Id = "horizontalScrollBar",
Orientation = Orientation.Horizontal,
[~ScrollBar.MaximumProperty] = control[~ScrollViewer.HorizontalScrollBarMaximumProperty],
[~~ScrollBar.ValueProperty] = control[~~ScrollViewer.HorizontalScrollBarValueProperty],
//[~~ScrollBar.ValueProperty] = control[~~ScrollViewer.HorizontalScrollBarValueProperty],
[~ScrollBar.ViewportSizeProperty] = control[~ScrollViewer.HorizontalScrollBarViewportSizeProperty],
[~ScrollBar.VisibilityProperty] = control[~ScrollViewer.HorizontalScrollBarVisibilityProperty],
[Grid.RowProperty] = 1,
},
new ScrollBar
(vert = new ScrollBar
{
Id = "verticalScrollBar",
Orientation = Orientation.Vertical,
[~ScrollBar.MaximumProperty] = control[~ScrollViewer.VerticalScrollBarMaximumProperty],
[~~ScrollBar.ValueProperty] = control[~~ScrollViewer.VerticalScrollBarValueProperty],
//[~~ScrollBar.ValueProperty] = control[~~ScrollViewer.VerticalScrollBarValueProperty],
[~ScrollBar.ViewportSizeProperty] = control[~ScrollViewer.VerticalScrollBarViewportSizeProperty],
[~ScrollBar.VisibilityProperty] = control[~ScrollViewer.VerticalScrollBarVisibilityProperty],
[Grid.ColumnProperty] = 1,
},
}),
},
};
vert[~~ScrollBar.ValueProperty] = control[~~ScrollViewer.VerticalScrollBarValueProperty];
return result;
}
}
}

Loading…
Cancel
Save