0

Is it possible to stop scrolling for a content in a scrollviewer? e.g.

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

Placing the element outside scrollviewer is not considered.

4

2 回答 2

0

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

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

抱歉,我今天没有时间编写代码,所以它必须是理论上的,而不是实践的。我希望它有所帮助。

开发支持、设计支持和更多的好处:http: //bit.ly/winappsupport

于 2013-02-18T18:48:13.810 回答
0

我会这样做的方式:

<ScrollViewer>
    <TextBlock /> 
    <ScrollViewer>
        <Grid>
            <!-- other controls -->
        </Grid>
    </ScrollViewer>
</ScrollViewer>
于 2013-02-18T16:28:19.520 回答