У меня есть Scrollview следующим образом. Теперь, каков мой сценарий. Первоначально scrollviewr будет отображать 10 элементов. Когда полоса прокрутки достигает 10-го элемента, мне нужно реализовать некоторые функции. Теперь проблема в том, что я не могу распознать, когда полоса прокрутки достигает последнего элемента. Я пытался использовать событие ScrollChanged
с вертикальным смещением, но, похоже, это не работает. Есть ли способ добиться этого.
<ScrollViewer x:Name="ChatListScrollViewer" Background="#ffffff" Grid.Column="0" ScrollChanged="ChatListScrolled" Focusable="False">
<VirtualizingStackPanel VerticalAlignment="Stretch">
<ItemsControl VirtualizingStackPanel.VirtualizationMode="Recycling" Background="White" x:Name="MessageList" ItemsSource="{Binding Source={StaticResource ChatList}}" Focusable="False" BorderBrush="Transparent" BorderThickness="0" HorizontalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Hidden" x:FieldModifier="public">
<ItemsControl.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<!-- Code -->
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ItemsControl.GroupStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0">
<!-- Code -->
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</VirtualizingStackPanel>
</ScrollViewer>
РЕДАКТИРОВАТЬ: прокрутка снизу вверх для моего сценария. Это Как найти, что ScrollViewer прокручивается до конца в WPF? полезно для обнаружения последнего элемента при прокрутке вниз. В моем сценарии это похоже на приложение для чата. Когда полоса прокрутки прокручивается вверх и достигает последних сообщений, мне нужно получить еще некоторые данные.
VerticalOffset
==ScrollableHeight
или альтернативноVerticalOffset == ExtentHeight - ViewportHeight
. Верхняя прокручиваемая позиция —VerticalOffset == 0
. Чего вы пытаетесь достичь? Если вы хотите реализовать виртуализацию пользовательского интерфейса, вы должны использоватьListBox
илиListView
вместоItemsControl
. Для обоих элементов управления списком виртуализация пользовательского интерфейса включена по умолчанию. - person BionicCode   schedule 09.06.2020ScrollViewer.ViewportHeight
или, скорее,VirtualizingPanel.CacheLength + ScrollViewer.ViewportHeight
. Чтобы обеспечить плавную прокрутку, вы должны предварительно загрузить, например. следующая страница (страницы) до того, как текущая страница будет полностью видна. Элементы-пустышки предотвращают изменение размера средства просмотра прокрутки при добавлении новых элементов. - person BionicCode   schedule 09.06.2020