Metro应用程序 - 如何滚动到StackPanel中的特定控件

时间:2012-08-27 10:30:29

标签: c# windows-phone-7 windows-8 microsoft-metro windows-runtime

在我的C#windows 8 metro app中,我在ScrollViewer上添加了一个StackPanel。我在StackPanel上水平添加了一些控件。将所有控件添加到StackPanel之后,我想滚动到特定控件并显示该控件(将焦点设置为特定控件)。

请告诉我这是否可行。我查看了ScrollViewer类引用,有一个名为ScrollToHorizo​​ntalOffset的方法,但我不知道如何获取StackPanel上添加的特定控件的偏移量。

StackPanel中没有这样的方法返回它的子元素的偏移量。

2 个答案:

答案 0 :(得分:1)

如果可能,我建议您查看类似ListView的内容,因为它允许您滚动到列表中的特定项目。但是,如果这不可行,你可以做这样的事情......

function scrollTo(int childIndex)
{
            double offset = 0;
            for (int i = 0; i < childIndex; i++)
            {
                var element = stack.Children[1] as FrameworkElement;
                offset += element.ActualWidth + element.Margin.Left + element.Margin.Right;
            }

            if (offset > scroll.ActualWidth)
                scroll.ScrollToHorizontalOffset(offset - scroll.ActualWidth);
            else
                scroll.ScrollToHorizonalOffset(0);
}

scroll是你的scrollviewer,stack是你的堆栈面板。假设水平布局。这只会将项目带入滚动窗口,它不会将其滚动到最左边缘,因为这并不总是可行。

答案 1 :(得分:0)

stackpanel根据他们请求的空间来布置控件,因此您可以通过在控件之前迭代所有子项并计算每个占用的空间来计算偏移量。