Как автоматически прокрутить ListView в UWP? - PullRequest
0 голосов
/ 10 октября 2018

Я создаю UWP для моего Raspberry Pi.Мое приложение отображает некоторые данные на экране, используя 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 голосов
/ 11 октября 2018

Можно ли как-нибудь прокрутить представление списка автоматически, и когда оно достигает конца, оно снова переходит в начало списка?

Я заметил, что высделать кастом AlternatingRowListView самостоятельно, это хорошее начало.Если вы хотите сделать автоматическую прокрутку ListView, вы можете попробовать добавить таймер в свой пользовательский AlternatingRowListView.Например, DispatcherTimer , вы можете запустить таймер, когда он загружен.Затем в обработчике событий Tick вы можете использовать ScrollViewer для прокрутки списка.

О том, как получить ScrollViewer?Я полагаю, что вы переопределили метод OnApplyTemplate в своем пользовательском классе управления, вы можете вызвать this.GetTemplateChild("ScrollViewer") as ScrollViewer, чтобы получить ScrollViwer в нем.

Вы можете обратиться к нижнему списку (XAML).) образец для деталей.

Затем вам нужно вручную рассчитать, достигнет ли он конца.Как только он достигнет конца, вы можете остановить таймер и прокрутить до верхней части списка.Приведенный выше пример также включает в себя часть расчета, вы можете проверить это.

0 голосов
/ 10 октября 2018

Если вы хотите прокрутить до определенного элемента в списке, вы можете использовать метод 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 как это:

var scrollViewer = GetScrollViewer(listView);
...