我的页面上有以下结构:
默认情况下,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同步移动?
非常感谢
答案 0 :(得分:0)
我使用事件处理程序而不是绑定来生成相同的功能。除了与我的方式有很大不同之外,我使用Scrollviewer的HorizontalOffset属性而不是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
个事件。