停止WP7循环选择器中选择器列表末尾的循环

时间:2011-12-22 07:15:58

标签: c# windows-phone-7 wpf-controls windows-phone-7.1

我的疑问是,有没有办法阻止循环选择器在到达列表末尾时循环。假设列表有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>

2 个答案:

答案 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;
    }