2013-07-30 57 views
1

我很努力使ListView自动向下滚动到底部,每次将新项目添加到ItemsSource时。据this post,我所要做的就是使用以下方法:使用WinRT XAML Toolkit自动滚动到WinRT App中的ListView底部

private void ScrollToBottom() 
{ 
    var scrollViewer = MyListView.GetFirstDescendantOfType<ScrollViewer>(); 
    scrollViewer.ScrollToVerticalOffset(scrollViewer.ScrollableHeight); 
} 

。但它没有效果我每次添加或删除ListView的项目集合中的元素时,都会调用此方法。没有自动滚动。

而在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中指定它。

我在这里错过了什么?

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

+0

你知道最新的listview是什么吗? –

+0

是的,他们都OK,绑定工作正常,它只是...不向下滚动,这就是为什么我不知道和如何解决它... – VasileF

+0

我想你可能会在项目之前滚动完全添加和创建。您可能能够创建一个自定义的ListView来覆盖OnItemsChanged,以确保它在项目进入后滚动。 –

回答

1

尝试绑定ListViewExtensions.ItemToBringIntoView(WinRT XAML Toolkit的附加属性)添加到您添加的项目中。

+0

感谢您的回答,但我没有足够的技巧来管理应用您的解决方案。然而,我发现了一个解决方案,使用WinRT XAML工具包,我会将它作为答案发布,以防万一它会对其他人有所帮助。 – VasileF

+0

@Filip更多信息?看起来很完美,但无法让这个工作,它确实滚动, - 但到顶部,当它应该是底部!没有从谷歌找到很多信息... – MemeDeveloper

+0

它在内部调用'listView.ScrollIntoView(newItemToBringIntoView)'这是平台API,我认为它会做最小的滚动来使项目可见,这意味着它可能在顶部或底部视图端口(如果它尚未在视图中),具体取决于当前偏移量。如果你希望它显示在一个特定的位置 - 你需要找到滚动查看器,获取项目容器相对于scrollviewer的位置并滚动,如http://stackoverflow.com/questions/24033120/how-to-得到-gridview的选择项,滚动位置的窗口-8-城域应用/ 24043348#24043348 –

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> 
3

在Windows应用商店我使用的应用程序 listViewReceiptDetailList.ScrollIntoView(listViewReceiptDetailList.Items [listViewReceiptDetailList.Items.Count() - 1]);