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;
using System.Reactive; using System.Reactive;
using System.Reactive.Linq; using System.Reactive.Linq;
using Perspex.Controls.Templates;
public class ScrollBar : TemplatedControl public class ScrollBar : TemplatedControl
{ {
@ -88,6 +89,18 @@ namespace Perspex.Controls.Primitives
return base.MeasureOverride(availableSize); 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() private bool CalculateIsVisible()
{ {
switch (this.Visibility) switch (this.Visibility)

2
Perspex.Themes.Default/ScrollBarStyle.cs

@ -66,9 +66,9 @@ namespace Perspex.Themes.Default
Background = Brushes.Silver, Background = Brushes.Silver,
Content = new Track Content = new Track
{ {
Id = "track",
[~Track.MinimumProperty] = control[~ScrollBar.MinimumProperty], [~Track.MinimumProperty] = control[~ScrollBar.MinimumProperty],
[~Track.MaximumProperty] = control[~ScrollBar.MaximumProperty], [~Track.MaximumProperty] = control[~ScrollBar.MaximumProperty],
[~~Track.ValueProperty] = control[~ScrollBar.ValueProperty],
[~Track.ViewportSizeProperty] = control[~ScrollBar.ViewportSizeProperty], [~Track.ViewportSizeProperty] = control[~ScrollBar.ViewportSizeProperty],
[~Track.OrientationProperty] = control[~ScrollBar.OrientationProperty], [~Track.OrientationProperty] = control[~ScrollBar.OrientationProperty],
Thumb = new Thumb Thumb = new Thumb

16
Perspex.Themes.Default/ScrollViewerStyle.cs

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

Loading…
Cancel
Save