uwp scrollViewer设置限制

时间:2016-10-19 12:30:31

标签: xaml scroll grid uwp scrollviewer

我在UWP页面中使用Grid和ScrollViewer,其中每行代表一个Shelf。我有N行,但是我需要在第一行的末尾和最后一行的开头之间设置ScrollViewer的限制,因为它们不在屏幕上(我只有这些行,所以当用户滚动直到限制我不希望他看到背景,而是一个空行。)

有没有办法指定ScrollViewer的上限和下限?

这是我定义这些元素的XAML:

<ScrollViewer ScrollViewer.VerticalScrollBarVisibility="Hidden" Name="MyScrollViewer">
    <Grid Name="MyGrid" Tapped="HideOptionMenu">
        <Grid.RowDefinitions>
        </Grid.RowDefinitions>
    </Grid>
</ScrollViewer>

在运行时动态添加行,因此行数并不总是相同。此外,当我调整屏幕大小时,每行的高度也会改变。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

我认为不可能设置ScrollViewer的限制。

您可以实现所需的一种方法是将过卷行放入第一个和最后一个网格行,并将它们转换到ScrollViewer的边界之外,以便在过度滚动时它们可见。

<ScrollViewer>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="100"/>
            <RowDefinition Height="100"/>
            <RowDefinition Height="100"/>
            <RowDefinition Height="100"/>
            <RowDefinition Height="100"/>
            <RowDefinition Height="100"/>
            <RowDefinition Height="100"/>
            <RowDefinition Height="100"/>
        </Grid.RowDefinitions>

        <!-- Top overscroll row -->
        <Rectangle Grid.Row="0" HorizontalAlignment="Stretch" Fill="Orange" Stroke="Black">
            <Rectangle.RenderTransform>
                <TranslateTransform Y="-100"/>
            </Rectangle.RenderTransform>
        </Rectangle>

        <!-- Bottom overscroll row -->
        <Rectangle Grid.Row="8" HorizontalAlignment="Stretch" Fill="Orange" Stroke="Black">
            <Rectangle.RenderTransform>
                <TranslateTransform Y="100"/>
            </Rectangle.RenderTransform>
        </Rectangle>

        <Rectangle Grid.Row="0" HorizontalAlignment="Stretch" Fill="Red" Stroke="Black"/>
        <Rectangle Grid.Row="1" HorizontalAlignment="Stretch" Fill="Red" Stroke="Black"/>
        <Rectangle Grid.Row="2" HorizontalAlignment="Stretch" Fill="Red" Stroke="Black"/>
        <Rectangle Grid.Row="3" HorizontalAlignment="Stretch" Fill="Red" Stroke="Black"/>
        <Rectangle Grid.Row="4" HorizontalAlignment="Stretch" Fill="Red" Stroke="Black"/>
        <Rectangle Grid.Row="5" HorizontalAlignment="Stretch" Fill="Red" Stroke="Black"/>
        <Rectangle Grid.Row="6" HorizontalAlignment="Stretch" Fill="Red" Stroke="Black"/>
        <Rectangle Grid.Row="7" HorizontalAlignment="Stretch" Fill="Red" Stroke="Black"/>
        <Rectangle Grid.Row="8" HorizontalAlignment="Stretch" Fill="Red" Stroke="Black"/>
    </Grid>
</ScrollViewer>

使用Grid实际上是StackPanel / ListView布局感觉有点笨拙,但由于我不知道有关UI的细节,我认为你有理由这样做。