每次将新项目添加到ListView
时,我都在努力让ItemsSource
自动向下滚动到底部。根据{{3}},我所要做的就是使用以下内容:
private void ScrollToBottom()
{
var scrollViewer = MyListView.GetFirstDescendantOfType<ScrollViewer>();
scrollViewer.ScrollToVerticalOffset(scrollViewer.ScrollableHeight);
}
使用WinRT XAML Toolkit
。但是每次我在ListView的items集合中添加或删除元素时,我都无法调用此方法。不过没有自动滚动。
在XAML中,有ListView:
<ScrollViewer>
<ListView x:Name="LinesListView"
ItemsSource="{Binding Lines}"
ItemTemplate="{StaticResource LineItemTemplate}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel>
<StackPanel.ChildrenTransitions>
<TransitionCollection>
<EntranceThemeTransition/>
</TransitionCollection>
</StackPanel.ChildrenTransitions>
</StackPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
</ScrollViewer>
另一方面,在我上面提供的相同链接上有另一个解决方案,但即使我尝试在XAML中指定它也不会显示listview项目动画。
我在这里缺少什么?
非常感谢任何建议,谢谢。
答案 0 :(得分:3)
最后,找到了一种方法:
我不得不摆脱ScrollViewer,当项目被添加时,首先我必须更新ListView的布局,然后向下滚动:
myListView.UpdateLayout();
myListView.ScrollToBottom();
ScrollToBottom();
方法在WinRT XAML Toolkit
中实施。
简单地说,虽然我用许多其他方法解决了这个问题......
动画问题通过XAML中的一些更改得到修复:
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel>
<StackPanel.Transitions>
<TransitionCollection>
<AddDeleteThemeTransition/>
</TransitionCollection>
</StackPanel.Transitions>
</StackPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
答案 1 :(得分:3)
在我使用的Windows商店应用中 listViewReceiptDetailList.ScrollIntoView(listViewReceiptDetailList.Items [listViewReceiptDetailList.Items.Count() - 1]);
答案 2 :(得分:1)
尝试将ListViewExtensions.ItemToBringIntoView
(来自WinRT XAML Toolkit的附加属性)绑定到您添加的项目。