我的疑问是,有没有办法阻止循环选择器在到达列表末尾时循环。假设列表有10个项目可能是1,2,3,4 ... 10,所以当滚动一旦你到达列表的末尾,即10然后它不应该让你循环..它应该改变方向循环选择器的流程。有可能吗?..
public void DisplayCatalog(string[] ServiceDisplayName, string[] WheelDisplayName, BitmapImage[] ServiceIcons, WidgetBean[] ServiceBeanList, WidgetBean[] WheelBeanList)
{
updateUI();
DisplayNames.Clear();
int idIndex = 0;
for (int j = 0; j < WheelDisplayName.Length; j++)
{
string disp1 = WheelDisplayName[j];
if (!Utils.isNullString(disp1))
{
DisplayNames.Add(new ItemList() { WidgetName = disp1, ID = (idIndex + 1) });
idIndex += 1;
}
}
this.selectorLeft.DataSource = new ListLoopingDataSource<ItemList>() { Items = DisplayNames, selectedItem = DisplayNames[Index] };
对应的xaml :(我正在使用水平循环选择器)
<loop:LoopingSelector
x:Name="selectorLeft" VerticalAlignment="Center" ItemSize="200,68" Height="63"
d:LayoutOverrides="Height" Width="450">
<loop:LoopingSelector.ItemTemplate>
<DataTemplate>
<StackPanel Background="#FF48BA1C" Height="75">
<TextBlock Margin="2,12,2,2" Width="Auto" TextTrimming="WordEllipsis" TextAlignment="Center" x:Name="scrollingTextBlock"
Text="{Binding WidgetName}" FontSize="26" Foreground="White" VerticalAlignment="Bottom" HorizontalAlignment="Stretch"/>
</StackPanel>
</DataTemplate>
</loop:LoopingSelector.ItemTemplate>
</loop:LoopingSelector>
答案 0 :(得分:1)
自从一年以来,我一直在努力为这个问题寻找解决方案。今天我找到了this。我不得不做一个改变。那是......
this.selectorLeft.DataSource = new ListLoopingDataSource<ItemList>(WheelDisplayName.Length+1) { Items = DisplayNames, selectedItem = DisplayNames[Index] };
只有当项目总数大于WheelDisplayName + 1时,循环选择器才会循环,否则它将在最后一项的末尾停止循环。
答案 1 :(得分:0)
实施ILoopingSelectorDataSource。在列表的开头/结尾的GetPrevious / GetNext中返回null。
e.g。下载最新的工具包,注释掉GetNext的回归。请注意,现在运行示例时它不会显示任何下一个项目,因此不会循环。
abstract class DataSource : ILoopingSelectorDataSource
{
private DateTimeWrapper _selectedItem;
public object GetNext(object relativeTo)
{
DateTime? next = GetRelativeTo(((DateTimeWrapper)relativeTo).DateTime, 1);
return null;// next.HasValue ? new DateTimeWrapper(next.Value) : null;
}
public object GetPrevious(object relativeTo)
{
DateTime? next = GetRelativeTo(((DateTimeWrapper)relativeTo).DateTime, -1);
return next.HasValue ? new DateTimeWrapper(next.Value) : null;
}