かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

自動で切り替わるFlipViewの作り方

こんなBehaviorを作ってぽとっとすればOK

public class FlipViewRollingBehavior : Behavior<FlipView>
{
    private IDisposable disposable;

    public static readonly DependencyProperty IntervalProperty =
        DependencyProperty.Register(
            "Interval", 
            typeof(int), 
            typeof(FlipViewRollingBehavior), 
            new PropertyMetadata(15));

    public int Interval
    {
        get { return (int)GetValue(IntervalProperty); }
        set { SetValue(IntervalProperty, value); }
    }

    protected override void OnAttached()
    {
        disposable = Observable.Interval(TimeSpan.FromSeconds(this.Interval))
            .Subscribe(async _ =>
            {
                await this.AssociatedObject.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    var index = this.AssociatedObject.SelectedIndex;
                    index++;
                    if (index >= ((IEnumerable<object>)this.AssociatedObject.ItemsSource).Count())
                    {
                        index = 0;
                    }

                    this.AssociatedObject.SelectedIndex = index;
                });
            });
    }

    protected override void OnDetaching()
    {
        disposable.Dispose();
        disposable = null;
    }
}

ちなみに、WinRT用のBehaviorの基本クラスはReactivePropertyにこっそり入ってるので、それを参照に追加してから作ってください。ReactivePropertyに依存したくない場合は基本クラスをDependencyObjectとIBehaviorにしてAssosiatedObjectを適当にFlipViewにキャストしてしまえばOKです。