【问题标题】:Is there a way to ensure that a Silverlight ScrollViewer keeps the top item completely visible有没有办法确保 Silverlight ScrollViewer 保持顶部项目完全可见
【发布时间】:2011-09-23 13:56:07
【问题描述】:

在 Silverlight 4 中,有没有一种方法可以让您在向下翻页 ScrollViewer(即单击与拇指相邻的区域中的滚动条)时,顶部的任何项目都完全可见。当拖动拇指或使用鼠标滚轮时,我仍然需要它平滑滚动。

我的客户不喜欢当他向下翻页时一个项目被切成两半,因为它在顶部和底部都被切成两半。我建议了某种完整的卷轴,他不喜欢。他希望它仍能流畅滚动,除非向上或向下翻页。

编辑

这就是问题所在。物品大小不一。所以我必须检测滚动查看器顶部的项目并将其滚动到视图中。有没有简单的方法可以做到这一点?

【问题讨论】:

    标签: silverlight scroll scrollviewer


    【解决方案1】:

    您需要做的第一件事是从ScrollViewer 的内部挖出垂直滚动条。您可以在VisualTreeHelper 的帮助下完成此操作。各种博客中有许多小代码块,使其使用更加容易。我推荐这个VisualTreeEnumeration(但我不会)。使用该扩展类,您可以获得垂直滚动条:

    ScrolBar vertSB = someScrollViewer.Descendents()
                                      .OfType<ScrollBar>()
                                      .FirstOrDefault(sb => sb.Name = "VerticalScrollBar");
    

    现在您可以附加到 is Scroll 事件并确定发生的滚动类型,如下所示:

    vertSB.Scroll += (s, args) =>
    {
         if (args.ScrollEventType == ScrollEventType.LargeDecrement
             || args.ScrollEventType == ScrollEventType.LargeIncrement)
         {
              // using args.NewValue determine the correct Integral value and assign
              // using someScrollViewer.ScrollToVerticalOffset
         }
    };
    

    【讨论】:

    • 这就是问题所在。物品的大小不一样。所以我必须检测滚动查看器顶部的项目并将其滚动到视图中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2021-08-24
    • 2017-11-12
    • 2015-12-13
    相关资源
    最近更新 更多