【问题标题】:How to get GridView.Selected Item's Scroll Position in Windows 8 Metro App如何在 Windows 8 Metro App 中获取 GridView.Selected 项目的滚动位置
【发布时间】:2014-06-04 09:00:36
【问题描述】:

我正在使用代码选择 gridview 项目,所以我还需要我的 gridview 在所选项目的位置滚动,我尝试了 GridView.ScrollintoPosition() 但它不起作用。 有什么方法可以获取 SelectedItem 的 Scroll position 以便我可以使用 scrollViewer1.ScrollToHorizo​​ntalOffsetWithAnimation()

滚动它

【问题讨论】:

    标签: c# windows-8 windows-runtime winrt-xaml winrt-xaml-toolkit


    【解决方案1】:

    这里有几个方面。

    1. 我认为 gridView.ScrollIntoView(gridView.SelectedItem) 应该可以工作。它有点异步,所以代码不会立即看到它滚动,但如果你执行await Task.Delay(100) 之类的操作 - 你可能会看到ScrollViewer 偏移更新..
    2. 如果您想要动画滚动 - 您可以使用 WinRT XAML 工具包的 ScrollViewer.ScrollToHorizontalOffsetWithAnimation() 扩展,或者如果您的目标是 Windows 8.1 - 您可以使用支持动画滚动的新 ScrollViewer.ChangeView() 方法。
      1. 需要先在GridView模板中获取ScrollViewer的实例。您可以使用GetTemplatePart()VisualTreeHelper 来完成。
      2. 现在需要获取SelectedItem的UI容器在ScrollViewer中的位置。为此,您首先需要容器本身,您可以使用var container = gv.ContainerFromItem(gv.SelectedItem) 获得它,但如果GridViewItemsPanel 是虚拟化的 - 您可能无法这样做,因为SelectedItem 可能没有它的用户界面容器。在这种情况下,出于多种原因,我会简单地进行非动画滚动 - 主要是性能,但如果你真的必须 - 你也许可以根据项目和项目集合中 SelectedItem 的索引来计算位置大小,但可能有点复杂。
      3. 一旦你得到容器,你就可以通过var horizontalOffset = gridViewItem.TransformToVisual(scrollViewer).TransformPoint(new Point()).X; 之类的东西得到它的位置
      4. 此时您应该可以使用您喜欢的方法滚动到偏移量。

    【讨论】:

    • 谢谢@Filip Skakun,这很有帮助,我正在使用 WinRT XAML Toolkit 的正如你所说,selecteditem 没有容器,所以我使用了所选项目的索引,计算了一个项目的滚动效果和使用这些信息,我能够实现选定项目的动画移动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多