2013-07-30 55 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]);