Windows phone 7 可以无限循环滚动的水平列表框
我想制作一个可以无限滚动的水平列表框(循环列表框/scrollviewer,或循环列表框/scrollviewer),这意味着当我滚动到它的末尾时,它将从一开始滚动 我试图使列表框水平,但它不会滚动,所以我把它放在scrollviewer中,让它水平滚动。然而,滚动的不是列表框,我需要它们从一开始滚动 这就是我到目前为止所做的:Windows phone 7 可以无限循环滚动的水平列表框,windows-phone-7,listbox,scrollviewer,Windows Phone 7,Listbox,Scrollviewer,我想制作一个可以无限滚动的水平列表框(循环列表框/scrollviewer,或循环列表框/scrollviewer),这意味着当我滚动到它的末尾时,它将从一开始滚动 我试图使列表框水平,但它不会滚动,所以我把它放在scrollviewer中,让它水平滚动。然而,滚动的不是列表框,我需要它们从一开始滚动 这就是我到目前为止所做的: private void DoWebClient() { var webClient = new WebClient();
private void DoWebClient()
{
var webClient = new WebClient();
webClient.OpenReadAsync(new Uri("http://music.mobion.vn/api/v1/music/userstop?devid="));
webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
}
void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
using (var reader = new StreamReader(e.Result))
{
string s = reader.ReadToEnd();
Stream str = e.Result;
str.Position = 0;
XDocument xdoc = XDocument.Load(str);
var data = from query in xdoc.Descendants("user")
select new mobion
{
avlink = (string)query.Element("user_info").Element("avlink"),
nickname = (string)query.Element("user_info").Element("nickname"),
track = (string)query.Element("track"),
artist = (string)query.Element("artist"),
};
listBox.ItemsSource = data;
}
}
Mainpage.xaml
<phone:PhoneApplicationPage.Resources>
<DataTemplate x:Key="DataTemplate1">
<Grid/>
</DataTemplate>
<Storyboard x:Name="Storyboard1" RepeatBehavior="forever" Completed="Storyboard1_Completed">
<DoubleAnimation Duration="0:0:25" To="-2400" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="imagesScrollview" d:IsOptimized="True"/>
</Storyboard>
</phone:PhoneApplicationPage.Resources>
<ScrollViewer HorizontalScrollBarVisibility="Auto" Margin="8,563,-2400,2" Width="auto" x:Name="imagesScrollview" Opacity="1" Background="#FF3ED216" Grid.Row="1" RenderTransformOrigin="0.5,0.5">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<im:ControlStoryboardAction Storyboard="{StaticResource Storyboard1}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<ScrollViewer.RenderTransform>
<CompositeTransform/>
</ScrollViewer.RenderTransform>
<ListBox x:Name="listBox" Width="Auto" Height="Auto" Background="#FF3ED216" ManipulationCompleted="listBox_ManipulationCompleted">
<ListBox.RenderTransform>
<CompositeTransform/>
</ListBox.RenderTransform>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal">
<StackPanel.RenderTransform>
<TranslateTransform X="0" />
</StackPanel.RenderTransform>
</StackPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="15,0">
<Image Name="imageAV" Source="{Binding Path=avlink}" Height="80" Width="80" Stretch="UniformToFill" MouseLeftButtonUp="imageAV_MouseLeftButtonUp" ImageFailed="imageAV_ImageFailed" />
<StackPanel Orientation="Vertical" Margin="10,0,0,0" MouseLeftButtonUp="StackPanel_MouseLeftButtonUp">
<TextBlock Name="indexTextBlock" Text="{Binding num}" />
<TextBlock Text="{Binding nickname}"/>
<TextBlock Text="{Binding track}" FontWeight="Bold" />
<TextBlock Text="{Binding artist}" />
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ScrollViewer>
不确定这是否有帮助,但无限滚动的标准方法是将列表开头的至少一屏重复项目放在末尾,到达末尾后,透明地跳过(一步滚动)到开头或固定的短偏移(反之亦然)因此,它看起来是相同的,但用户从列表的开头看项目,而不是从列表的结尾看项目的副本。要使列表框水平滚动,需要设置内部ScrollViewer的滚动条可见性属性。像这样:
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Disabled" >
包含一个
LoopingSelector
类,您可以基于该类实现自己的控件。有一个例子是在(虽然是垂直列表)创建这样一个控件。您计划列表中有多少项?我需要获取一个列表来显示此网站的用户信息:所以我想说大约35-40项。谢谢您的示例,这就是我希望为我的列表框实现的方式。与windows phone 7上的Arlarms应用程序类似,您可以将时间从1滚动到60,然后返回到1并反转。但是我希望它是水平的。我将尝试使用LoopingSelector。嗨,Matt,我已经检查了LoopingSelector,但是有一些问题,我不希望未选中的项目消失,并且选中的项目总是停留在中间,而且被要求使其自动滚动…我应该使用Blend 4或Visual studio来存档吗?应该采取什么样的方法?我试着在谷歌上搜索了2天,但什么也找不到。