在浏览ItemsControlScrollViewer中的项目时,我可以循环显示内容,以便第一个项目位于最后一个项目之后(在用户看来)吗?

我有一个自定义的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中的每个项目都占据了控件的整个可见区域,因此用户一次只能看到一个项目。下图表示正在使用的控件,红色框表示视口。计时器自动移至下一个项目。

当前移动幻灯片的代码(为简便起见,已简化)如下所示:

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);
}


到达最后一张幻灯片并将视口更新为第一张幻灯片时,它将反向扫描所有幻灯片以到达起点。像这样:

我想做的是使其看起来好像视口直接从“幻灯片5”扫描到“幻灯片1”一样,例如:


有没有一种方法可以设置我的ItemsControlScrollViewer或调整我的Animation来实现这一目标?

最佳答案

我的解决方案是使用WPF博士编写的旧LoopFrame类的形式。

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

关于c# - 通过动画循环WPF ItemsControl或ScrollViewer中的项目?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14343338/

10-17 01:17