首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ScrollBar上手动滚动ScrollViewer

在ScrollBar上手动滚动ScrollViewer
EN

Stack Overflow用户
提问于 2014-03-06 14:11:37
回答 2查看 492关注 0票数 0

我的页面上有以下结构:

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

代码语言:javascript
运行
复制
var scrollbars = this.ScrollView.GetDescendantsOfType<ScrollBar>().ToList();
_scrollBar = scrollbars.FirstOrDefault(x => x.Orientation == Orientation.Horizontal);

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

代码语言:javascript
运行
复制
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同步移动,我需要更改什么?

非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-06 18:01:51

您可以实现附加的属性/行为,该属性/行为将为绑定到ScrollViewer的偏移集添加支持。您的行为对象将响应属性值更改,方法是在ScrollToVerticalOffset()上调用ScrollViewer,并通过更新属性值来响应ViewChanged事件。

票数 0
EN

Stack Overflow用户

发布于 2014-03-06 14:53:11

我使用但使用事件处理程序而不是绑定生成了相同的功能。除了我的方法之外,我使用的是滚动查看器的HorizontalOffset属性,而不是ScrollViewer中的水平滚动条。也许这对你有用?

这是我怎么做的一个例子。

抱歉,它在VB中

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

私有子System.Windows.RoutedPropertyChangedEventArgs(Of myslider_ValueChanged(发送方为System.Object,e为System.Object System.Double)

代码语言:javascript
运行
复制
        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.Object

代码语言:javascript
运行
复制
    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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22227009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档