1

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

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

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

4

2 回答 2

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 是您的滚动查看器,而 stack 是您的堆栈面板。假设水平布局。这只会将项目带入滚动窗口,它不会将其滚动到最左边缘,因为这并不总是可能的。

于 2012-08-27T14:22:40.700 回答
0

堆栈面板根据他们请求的空间量来布置控件,因此您可以通过在控件之前遍历所有子项并计算每个子项占用多少空间来计算偏移量。

于 2012-08-27T13:52:52.580 回答