停止滚动滚动查看器中的内容

时间:2013-02-18 14:00:49

标签: wpf silverlight c#-4.0 windows-8

是否可以停止滚动浏览滚动查看器中的内容? e.g。

<ScrollViewer>
    <Grid>
        <TextBlock /> <!-- I want not to scroll this item when rest is scrolling -->
        <!-- other controls -->
    </Grid>
</ScrollViewer>

不考虑将元素放在scrollviewer外部。

2 个答案:

答案 0 :(得分:0)

我会这样做:

<ScrollViewer>
    <TextBlock /> 
    <ScrollViewer>
        <Grid>
            <!-- other controls -->
        </Grid>
    </ScrollViewer>
</ScrollViewer>

答案 1 :(得分:0)

如果这是在使用WPF的桌面应用程序中,最好的方法是覆盖ScrollViewer的ArrangeOverride方法。在这种情况下,我建议您创建自己的自定义附加属性,如 ScrollHoldOffset ,并将其分配给TextBox。然后,在覆盖中,您可以检查每个控件以查看是否已设置此属性。如果是,则控件应保持在原位而不是滚动,直到滚动超过某个阈值( ScrollHoldOffset )。

如果这是一个Windows应用商店应用程序,那将会更加困难,因为ScrollViewer是密封的,因此不能继承,也不能覆盖ArrangeOverride方法。每当滚动位置改变时,可以编写一些代码来“撤消”滚动。我从this example开始,向您展示如何订阅滚动条位置更改事件。然后,您可以更改RenderTransform以偏移滚动。

抱歉,我今天没有时间对其进行编码,所以它必须在理论上而不是练习中。我希望它有所帮助。

开发人员的支持,设计支持和更加出色的善意:http://bit.ly/winappsupport