Q:

Manually scrolling a ScrollBar on a ScrollViewer

I have the following structure on my page:

By default there is a ScrollBar on the ScrollViewer.
var scrollbars = this.ScrollView.GetDescendantsOfType<ScrollBar>().ToList();
_scrollBar = scrollbars.FirstOrDefault(x => x.Orientation == Orientation.Horizontal);

I bind the _scrollBar value to the value of the slider and the maximum to the maximum.
var valueBinding = new Binding();            
valueBinding.Source = _scrollBar;
valueBinding.Mode = BindingMode.TwoWay;
valueBinding.Path = new PropertyPath("Value");
BindingOperations.SetBinding(this.Slider, Slider.ValueProperty, valueBinding);

var maximumBinding = new Binding();
maximumBinding.Source = _scrollBar;
maximumBinding.Mode = BindingMode.OneWay;
maximumBinding.Path = new PropertyPath("Maximum");
BindingOperations.SetBinding(this.Slider, Slider.MaximumProperty, maximumBinding);

When I open my page there is a slider and the default scrollbar. When I slide/scroll the scrollViewer both, the slider and scrollbar, are sliding/scrolling synchronously. Now when I'm moving the slider the scrollbar is moving as well but not the scrollViewer. The scrollbar scroll event is also not fired. When I'm moving the scrollbar with the mouse pointer the slider and also the scrollViewer are moving and the scrollbar scroll event is fired. 
What do I need to change that I can move the slider and the scrollViewer is moving synchronously?
Many thanks

A:

You can implement an attached property/behavior that will add support for binding to offsets of a ScrollViewer. Your behavior object would respond to property value changes by calling e.g. ScrollToVerticalOffset() on the ScrollViewer and respond to ViewChanged events by updating the property value.

