簡體   English   中英

在ScrollViewer上手動滾動ScrollBar

[英]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的Horizo​​ntalOffset屬性而不是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM