【问题标题】:Tap on gridviewitem should scrolls it to top left windows 8点击gridviewitem应该将其滚动到左上角windows 8
【发布时间】:2014-05-18 23:25:58
【问题描述】:

我处于以下结构的情况

<GridView ScrollViewer.HorizontalScrollMode="Enabled" >
     <Grid>
       <Gridview>
       ...
       </GridView>
    </Grid>

    <Grid>
      <Gridview>
       ...
      </GridView>
    </Grid>
      .
      .
      .
 </GridView

现在我需要的是任何 CHILD gridview 的 selectionchange 事件,它应该将父网格滚动到右上角,以便点击项目的 gridview 将显示在第一个位置。 像下面的图片

我正在尝试使用

 var scrollViewer1 = GVmain.GetFirstDescendantOfType<ScrollViewer>();
 scrollViewer1.ScrollToHorizontalOffsetWithAnimation(moveGridView);

经过如此多的尝试和尝试,我无法想出任何可以设置“moveGridView”值的公式,以便它可以根据需要向左滚动网格视图。

【问题讨论】:

    标签: c# gridview windows-8 scrollviewer


    【解决方案1】:

    如果您的主 GV 没有虚拟化,那么所有子 GV 都在可视化树中,因此如果使用我的工具包,您可以检查子 GV 相对于主 GV 的位置,如下所示:

    var pos = childGV.GetPosition(relativeTo: GVmain);
    var scrollViewer1 = GVmain.GetFirstDescendantOfType<ScrollViewer>();
    scrollViewer1.ScrollToHorizontalOffsetWithAnimation(pos.X);
    

    注意,如果您的目标是 Windows 8.1 - 您应该避免使用 ScrollToHorizontalOffsetWithAnimation(),因为内置的 ChangeView() 方法应该性能更好并且还支持动画。

    【讨论】:

    • 嘿菲利普,我试过这个,但它总是需要 gridview 滚动到 End ,似乎需要将 pos.X 与一些数字相除,因为它给出了非常大的值。有什么想法吗?
    • 我正在使用 childGV.GetPosition() 并将其除以包括边距在内的列的总宽度,它显示出奇怪的行为:当我第一次单击列时,它不会向左滚动,而是它的滚动条的宽度变小了,当我第二次点击它时,同样的事情发生了,它的滚动条的宽度变得更小了,现在第三次它确实向左滚动了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多