3

ItemsControlor中移动项目时ScrollViewer,我可以循环内容以使第一个项目“在”最后一个项目“之后”(用户感知)?

我有一个自定义ScrollViewer选项,可以在选择之间进行动画处理,目前包含一个ItemControl. 用于设置我的控件的 XAML 如下:

<local:AnimatedScrollControl x:Name="myScroll" Grid.Column="1" VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden">
    <ItemsControl x:Name="myList"
                    ItemsSource="{Binding SlidesList}"
                    ItemTemplate="{StaticResource SlideTemplateOne}"
                    VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
</local:AnimatedScrollControl>

中的每个项目都ItemControl占据了控件的整个可见区域,因此用户一次只能看到一个项目。下图表示正在运行的控件,红色框表示视口。计时器自动移动到下一个项目。 控制实例01 移动幻灯片的代码(为简洁起见)当前如下所示:

private void NextSlide()
{
    _currentSlide++;

    // get the current offset
    double offset = (double)myScroll.GetValue(AnimatedScrollControl.SlideOffsetProperty);

    // get the width of the current slide
    FrameworkElement elementContainer = myList.ItemContainerGenerator.ContainerFromItem(CurrentSlide) as FrameworkElement;

    // set the `to` value for a single slide shift
    double to = offset + elementContainer.ActualWidth;

    if (_currentSlide == _items.Count)
    {
        to = 0;
        _currentSlide = 0;
    }

    DoubleAnimation animation = new DoubleAnimation();
    animation.EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut };

    animation.From = offset;
    animation.To = to;
    animation.Duration = TimeSpan.FromMilliseconds(300);

    myScroll.BeginAnimation(AnimatedScrollControl.SlideOffsetProperty, animation);
}

当到达最后一张幻灯片并且视口更新到第一张幻灯片时,它会反向扫描所有幻灯片以到达开头。像这样: 控制实例 02 我想做的是让它看起来好像视口直接从“幻灯片 5”扫描到“幻灯片 1”,例如: 控制实例 03

有没有办法可以设置我的ItemsControlorScrollViewer或调整 myAnimation以实现此目的?

4

1 回答 1

0

我的解决方案是使用LoopFrameWPF 博士编写的旧类。

http://drwpf.com/blog/2009/08/05/itemscontrol-n-is-for-natural-user-interface/

于 2013-01-18T20:52:15.543 回答