3

ItemsControlor内のアイテムを移動するときScrollViewer、コンテンツをループして、最初のアイテムが最後のアイテムの「後」に来るようにすることはできますか?

現在ScrollViewerItemControl. コントロールを設定するための 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、コントロールの表示領域全体を占有するため、ユーザーには一度に 1 つの項目しか表示されません。以下の画像は、動作中のコントロールを表しており、赤いボックスはビューポートを示しています。タイマーが自動的に次のアイテムに移動します。 制御例 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

これを達成するために、またはを設定しItemsControlたりScrollViewer、調整したりする方法はありますか?Animation

4

1 に答える 1

0

LoopFrame私の解決策は、 WPF 博士によって書かれた古いクラスを使用するという形で得られました。

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

于 2013-01-18T20:52:15.543 に答える