如何在UWP中自动滚动ListView?

时间:2018-10-10 06:46:38

标签: listview uwp win-universal-app

我正在为Raspberry Pi创建UWP。我的应用程序使用ListView在屏幕上显示了一些数据。但是,屏幕未连接到鼠标或键盘,因此无法滚动查看全部数据。有什么方法可以自动滚动列表视图,当列表视图到达末尾时,它将再次转到列表的开头?

<local:AlternatingRowListView>
    <local:AlternatingRowListView.ItemTemplate>
        <DataTemplate>
            <Grid Width="{Binding ActualWidth, ElementName=TableData}" Padding="10">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="1.5*"/>
                    <ColumnDefinition Width="1*"/>
                    <ColumnDefinition Width="1*"/>
                    <ColumnDefinition Width="1*"/>
                    <ColumnDefinition Width="1*"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="1*"/>
                    <RowDefinition Height="3*"/>
                    <RowDefinition Height="1*"/>
                </Grid.RowDefinitions>
                <TextBlock Text="{Binding UpperDescription}" FontSize="24" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="4" Margin="2" HorizontalAlignment="Left" Foreground="Black"/>
                <TextBlock Text="{Binding Title}" FontSize="76" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="4" Margin="2" HorizontalAlignment="Left" Foreground="Black"/>
                <TextBlock Text="{Binding LowerDescription}" FontSize="24" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="4" Margin="2"  HorizontalAlignment="Left" Foreground="Black"/>
                <!--<TextBlock Text="{Binding Deadline}" FontSize="24" Grid.Row="1" Grid.Column="3" Margin="2"  HorizontalAlignment="Center" Foreground="Black"/>
                <TextBlock Text="{Binding State}" FontSize="24" Grid.Row="1" Grid.Column="4" Margin="2"  HorizontalAlignment="Center" Foreground="Black"/>-->
            </Grid>
        </DataTemplate>
    </local:AlternatingRowListView.ItemTemplate>
</local:AlternatingRowListView>

2 个答案:

答案 0 :(得分:0)

如果要滚动到列表中的特定项目,可以使用input_shape=(n_frames,3) 方法:

ScrollToView

如果您需要更精细的控件(例如侦听嵌入式listView.ScrollIntoView(item); 事件),则首先需要访问嵌入式控件:

以下帮助器方法将返回给定ScrollViewer中的第一个ScrollViewer

DependencyObject

因此,您现在可以像这样访问public static ScrollViewer GetScrollViewer(DependencyObject dependencyObject) { if (dependencyObject is ScrollViewer scroller) return scroller; for (int i = 0; i < VisualTreeHelper.GetChildrenCount(dependencyObject); i++) { var child = VisualTreeHelper.GetChild(dependencyObject, i); var result = GetScrollViewer(child); if (result != null) return result; } return null; }

ScrollViewer

答案 1 :(得分:0)

  

有什么方法可以自动滚动列表视图,当它到达末尾时,它将再次转到列表的开头吗?

我注意到您是自己制作一个自定义AlternatingRowListView,这是一个好的开始。如果要使ListView自动滚动,可以尝试在自定义AlternatingRowListView中添加一个计时器。例如,DispatcherTimer,您可以在加载计时器时启动它。然后,在其Tick事件处理程序中,可以使用ScrollViewer滚动列表。

关于如何获取ScrollViewer?我相信您已经在自定义控件类中覆盖了OnApplyTemplate方法,可以调用this.GetTemplateChild("ScrollViewer") as ScrollViewer来获取ScrollViwer。

有关详细信息,您可以参考Bottom-up list (XAML) sample

然后,您需要手动计算它是否到达末尾。一旦到达终点,您可以停止计时器并滚动到列表顶部。上述示例还涉及部分计算,您可以检查一下。