WP7 ScrollViewer根本无法正常工作

时间:2011-12-24 18:10:00

标签: windows-phone-7 scrollviewer

我的意图很简单。创建一个排序面板,用户可以在该面板中滚动该特定面板中的许多控件。该面板中的控件可以是按钮,图像或标签。无论如何。

事情是......如果我让我的ScrollViewer垂直,它会滚动,但它不会显示自身内的所有控件,而且,它不会停留在我滚动它的位置。如果我将它设置为水平,这就是我想要它的方式,它根本不会滚动...不是一点。

以下是我的代码:请帮助!

<ScrollViewer Height="118" Name="scrollerButtons" Width="362" Canvas.Left="167" Canvas.Top="275" VerticalAlignment="Center">
        <StackPanel Height="97" Name="stackPanelButtons" Width="168" Orientation="Horizontal" Canvas.Left="162" Canvas.Top="43" VerticalAlignment="Center" HorizontalAlignment="Center">
                <Button Width="60" Height="60"> </Button>
                <Button Width="60" Height="60"></Button>
                <Button Width="60" Height="60"></Button>
                <Button Width="60" Height="60"></Button>
                <Button Width="60" Height="60"></Button>
                <Button Width="60" Height="60"></Button>
                <Button Width="60" Height="60"></Button>
                <Button Width="60" Height="60"></Button>
                <Button Width="60" Height="60"></Button>
                <Button Width="60" Height="60"></Button>
                <Button Width="60" Height="60"></Button>
                <Button Width="60" Height="60"></Button>
                <Button Width="60" Height="60"></Button>
                <Button Width="60" Height="60"></Button>
                <Button Width="60" Height="60"></Button>
                <Button Width="60" Height="60"></Button>
                <Button Width="60" Height="60"></Button>
                <Button Width="60" Height="60"></Button>
        </StackPanel>
        </ScrollViewer>

我添加了一堆按钮来测试整个事情。任何帮助都非常感谢。谢谢。

2 个答案:

答案 0 :(得分:2)

从StackPanel中删除Height属性。您正在强制内部StackPanel截断其内容。由于内部StackPanel比ScrollViewer(118)小(97),因此ScrollViewer无需滚动。 ScrollViewer 期望其内容大于ScrollViewer本身。

答案 1 :(得分:0)

我所做的是在包含堆栈面板的网格上侦听SizeChangedEvent,然后相应地调整ScrollViewer的高度。在这里,例如我只是将其设置为屏幕尺寸的一半。它并不完美,但它确实有效。

private void ContentPanel_SizeChanged(object sender, SizeChangedEventArgs e)
{
        // Resize the scroll view if the stackpanel is bigger, additional 70 for app bar
        if (e.NewSize.Height >
                (System.Windows.Application.Current.Host.Content.ActualHeight - 70))
        {
                ContentScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
                ContentScrollViewer.Height = System.Windows.Application.Current.Host.Content.ActualHeight / 2;
        }
}