2011-07-03 120 views
2

嗨我想創建一個循環列表框,以便最後一個項目的下一個項目是第一個項目,反之亦然 - 創建一個沒有頂部或底部的列表框。創建一個循環列表框

我知道WP7工具包中有一個LoopingSelector,但它並不完全符合我的要求,因爲它會淡入/淡出周邊物品,並且您有一個始終位於中間的「選定」項目。

我看着LinkedList的集合,但它似乎並不支持循環:「只有LinkedList(Of T)類不支持鏈接,分裂,週期,或其他特徵,可以給在列表不一致的狀態。「

有誰知道我正在尋找的解決方案還是需要開發當前Listbox和Toolkit的LoopingSelector的混合?

很多thanx!

回答

1

我最近遇到同樣的問題!我使用blend 4來處理這個問題,使得我的列表在特定時間重置到某個位置,同時在原始列表的前面和後面添加一個列表副本。

例如:我的名單是:1-2-3-4-5-6, 我會讓它1-2-3-4-5-6-1-2-3-4-5-6 -1-2-3-4-5-6 ,並且它每20秒重置到原始位置。例如:如果用戶在項目4上,它會將位置重置爲項目4,但是在中間列表中。

我現在有我的問題問在這裏你可以,如果任何幫助檢查出: horizontal listbox that could be infinite circle scrolling

+0

您好ng_ducnghia,所以如果我理解正確,你有一個列表,並在該列表中複製原始列表兩次,以便每個項目有3個它的實例? 重置位置是否使用ScrollIntoView方法? – n00b

+0

嗨n00b,我最近解決了這個問題。我在滾動查看器裏面有我的列表框(確保你禁用列表框滾動),並且我使用scrollviewer的操作完成事件,這意味着當你滾動到結尾時,它會採取行動。然後,我通過使用scrollToHorizo​​ntalOffset(或scrolltoVerticalOffset)將它轉到第一項。 –

0

使用ScrollViewer中包含列表框,把ManipulationCompleted事件,並使用ScrolltoVerticalOffset(0)有它循環滾動。也許我的代碼將有助於:

<ScrollViewer HorizontalScrollBarVisibility="Auto" Margin="-2,567,-1,0" x:Name="imagesScrollview" 
        Opacity="1" Grid.Row="1" RenderTransformOrigin="0.5,0.5" 
        ManipulationCompleted="imagesScrollview_ManipulationCompleted" Height="85" MouseLeftButtonDown="ScrollViewer_MouseLeftButtonDown"> 
     <ScrollViewer.Background> 
      <ImageBrush ImageSource="/PhoneApp11;component/Images/top_friends_float.png" /> 
     </ScrollViewer.Background> 
     <ListBox x:Name="listBox" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled" Width="Auto" Height="80" Background="{x:Null}"> 

      <ListBox.ItemTemplate> 
       <DataTemplate> 

和操縱事件:

 private void imagesScrollview_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e) 
    { 
     ScrollViewer scrollviewer = sender as ScrollViewer; 

     if (scrollviewer.HorizontalOffset > (listBox.ActualWidth - 700)) 
      scrollviewer.ScrollToHorizontalOffset(0); 
     else if (scrollviewer.HorizontalOffset < 100) 
      scrollviewer.ScrollToHorizontalOffset((listBox.ActualWidth - 487)); 
    } 

***請注意:我讓我的ScrollViewer在兩個單向循環。