[英]Manually scrolling a ScrollBar on a ScrollViewer
我的頁面上具有以下結構:
默認情況下,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同步移動?
非常感謝
我使用事件處理程序而不是綁定來產生相同的功能。 除了與我的操作方式的最大不同之外,我使用Scrollviewer的HorizontalOffset屬性而不是ScrollViewer中的水平滾動條。 也許這對您有用?
這是我如何做的一個例子。
抱歉,它在VB中
我相信這里唯一缺少的是我將滑塊的最大值設置為100。
私人Sub myslider_ValueChanged(發送者為System.Object,e為System.Windows.RoutedPropertyChangedEventArgs(屬於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
私有子myscrollviwer_ScrollChanged(發送方為System.Object,e為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
您可以實現附加的屬性/行為,該屬性/行為將添加對綁定到ScrollViewer
偏移量的支持。 您的行為對象將通過調用ScrollViewer
上的ScrollToVerticalOffset()
來響應屬性值更改,並通過更新屬性值來響應ViewChanged
事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.