在ScrollViewer上手动滚动ScrollBar

时间:2014-03-06 14:11:38

标签: c# windows-runtime scrollviewer

我的页面上有以下结构:

enter image description here

默认情况下,ScrollViewer上有一个ScrollBar。

var scrollbars = this.ScrollView.GetDescendantsOfType<ScrollBar>().ToList();
_scrollBar = scrollbars.FirstOrDefault(x => x.Orientation == Orientation.Horizontal);

我将_scrollBar值绑定到滑块的值,最大值绑定到最大值。

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);

当我打开页面时,有一个滑块和默认滚动条。当我同时滑动/滚动scrollViewer时,滑块和滚动条会同步滑动/滚动。现在,当我移动滑块时,滚动条也在移动,但不是scrollViewer。滚动条滚动事件也不会被触发。当我使用鼠标指针移动滚动条时,滑块和scrollViewer正在移动,并且会触发滚动条滚动事件。

我需要更改哪些内容我可以移动滑块并且scrollViewer同步移动?

非常感谢

2 个答案:

答案 0 :(得分:0)

我使用事件处理程序而不是绑定来生成相同的功能。除了与我的方式有很大不同之外,我使用Scrollviewer的Horizo​​ntalOffset属性而不是ScrollViewer中的水平滚动条。也许这对你有用吗?

以下是我如何做到这一点的示例。

抱歉它在VB中

我认为唯一缺少的是我将滑块的最大值设置为100。

Private Sub myslider_ValueChanged(sender As System.Object,e As System.Windows.RoutedPropertyChangedEventArgs(Of System.Double))         尝试

        Dim sliderPercentage As Integer = myslider.Value

        If (sliderPercentage > 0) Then

            sv.ScrollToHorizontalOffset((sv.ScrollableWidth / 100) * myslider.Value)

            myscrollviwer.ScrollToHorizontalOffset((myscrollviwer.ScrollableWidth / 100) * myslider.Value)

        Else
            sv.ScrollToHorizontalOffset(0)
            myscrollviwer.ScrollToHorizontalOffset(0)
        End If

    Catch ex As Exception

    End Try
End Sub

Private Sub myscrollviwer_ScrollChanged(sender As System.Object,e As System.Windows.Controls.ScrollChangedEventArgs)

    Try

        Dim scrollPercentage As Double = 0

        If (myscrollviwer.HorizontalOffset > 0) Then

            scrollPercentage = (myscrollviwer.HorizontalOffset / myscrollviwer.ScrollableWidth) * 100

            myslider.Value = scrollPercentage
        Else
            myslider.Value = 0
        End If

    Catch ex As Exception

    End Try
End Sub

答案 1 :(得分:0)

您可以实现附加属性/行为,这将添加对绑定到ScrollViewer的偏移的支持。您的行为对象将通过调用以下内容来响应属性值更改ScrollToVerticalOffset()上的ScrollViewer,并通过更新属性值来回复ViewChanged个事件。