在WinRT应用程序中自动滚动到底部ListView

时间:2013-07-30 18:52:03

标签: c# listview windows-8 windows-runtime autoscroll

每次将新项目添加到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项目动画。

我在这里缺少什么?

非常感谢任何建议,谢谢。

3 个答案:

答案 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的附加属性)绑定到您添加的项目。