Я работаю над проектом UWP с ListView с элементами, расположенными горизонтально. ListView выровнен по правому краю, и первый добавленный элемент всегда должен быть видимым, даже если после слов добавлено любое количество элементов.
Я успешно сохранил первый элемент, который будет отображаться при добавлении новых элементов в список, используя ScrollIntoView и настройку последнего элемента.
Но, кажется, это не работает при первом открытии приложения. Он прокручивается только до середины списка.
private void ItemsSource_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
ItemsListView.SelectedItem = Items.Last();
ItemsListView.ScrollIntoView(Items.Last(), ScrollIntoViewAlignment.Leading);
}
Я также пытался добавить ScrollIntoView
внутри события Loaded объекта ListView, пробовал с ChangeView
из ScrollerView
и т. Д. ,
Это мой ListView:
<ListView Name="ItemsListGrid"
Grid.Column="0"
HorizontalAlignment="Stretch" VerticalAlignment="Center"
BorderThickness="0"
Margin="0, 16, 24, 16"
ItemsSource="{x:Bind Items}"
ItemTemplateSelector="{StaticResource ItemTemplateSelector}"
ScrollViewer.HorizontalScrollMode="Enabled"
ScrollViewer.VerticalScrollMode="Disabled"
ScrollViewer.HorizontalScrollBarVisibility="Hidden"
IsItemClickEnabled="True"
CanDragItems = "False"
CanDrag = "False"
CanReorderItems = "False"
AllowDrop = "False"
Loaded="Grid_Loaded">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid VerticalAlignment="Center" HorizontalAlignment="Right"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Margin" Value="0, 0, 0, 0"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
Другое решение, которое я видел в Интернете, это:
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsStackPanel ItemsUpdatingScrollMode="KeepLastItemInView" VerticalAlignment="Bottom" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
Но я уже устанавливаю ItemsPanelTemplate
внутри мой ListView, и я не могу использовать это.