C# 点击gridviewitem应将其滚动至windows 8的左上角

C# 点击gridviewitem应将其滚动至windows 8的左上角,c#,gridview,windows-8,scrollviewer,C#,Gridview,Windows 8,Scrollviewer,我的情况是,我有以下结构 <GridView ScrollViewer.HorizontalScrollMode="Enabled" > <Grid> <Gridview> ... </GridView> </Grid> <Grid> <Gridview> ... </GridView>

我的情况是,我有以下结构

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

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

...
...
.
.
.

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

var pos = childGV.GetPosition(relativeTo: GVmain);
var scrollViewer1 = GVmain.GetFirstDescendantOfType<ScrollViewer>();
scrollViewer1.ScrollToHorizontalOffsetWithAnimation(pos.X);
var pos=childGV.GetPosition(relativeTo:GVmain);
var scrollViewer1=GVmain.getFirstDegenantofType();
scrollViewer1.滚动到带动画的水平偏移网络(位置X);

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

嘿,Filip,我尝试过这个,但总是需要gridview滚动到最后,似乎有必要将位置X除以一些数字,因为它给出了非常大的值。你知道吗?我正在使用childGV.GetPosition()并将其除以一列的总宽度(包括边距),它显示出奇怪的行为:当我第一次单击一列时,它不会向左滚动,但它的滚动条的宽度会变小,当我第二次单击它时,同样的事情发生了,它的滚动条的宽度越来越小,现在在第三次它确实滚动到左边,因为我想。
var pos = childGV.GetPosition(relativeTo: GVmain);
var scrollViewer1 = GVmain.GetFirstDescendantOfType<ScrollViewer>();
scrollViewer1.ScrollToHorizontalOffsetWithAnimation(pos.X);