0

ユーザーがしばらく操作していないときに自動的に次のページにフリップするフリップビューを含むアプリケーションを作成しようとしています。これは、フリップビューの選択が変更されたときに再起動される基本的な DispatcherTimer を使用して正常に機能します。

ここまでは順調ですが、リストビューなどのように、ユーザーがフリップビューで現在のアイテムを操作しているときにタイマーを実行したくありません。PointerPressed および PointerReleased ハンドラーをページに接続し、ポインターが押されるたびにタイマーを停止し、ポインターが離されたときにタイマーを再起動することができると考えました。

ポインターがフリップビュー上にある場合を除き、これは機能します。押されたハンドラーは実行されますが、FlipView は他のすべてのポインター イベントを飲み込むため、PointerReleased ハンドラーは実行されません。

これを機能させる方法がわかりません。WPF では、トンネリング イベントを使用するだけですが、WinRT ではその概念全体が消えたように見えますか? これを機能させる方法に関するアドバイスはありますか?

コードで更新

もちろん。フリップビューとディスパッチャータイマーを含むページがあります:

public sealed partial class MainPage : Page
{
    private DispatcherTimer slideScrollTimer;

    public MainPage()
    {
        // Set up a timer that'll flip to the next page every 5 seconds.
        this.slideScrollTimer= new DispatcherTimer()
        {
            Interval = TimeSpan.FromSeconds(5)
        };

        slideScrollTimer.Tick += slideScrollTimer_Tick;
        slideScrollTimer.Start();
    }

    void slideScrollTimer_Tick(object sender, object e)
    {
        // When the timer runs out, go to the next page, or back
        // to the first.
        if (flipView.SelectedIndex < flipView.Items.Count - 1)
        {
            flipView.SelectedIndex++;
        }
        else
        {
            flipView.SelectedIndex = 0;
        }
    }

    private void flipView_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        // restart the timer if someone flips to a different page
        if (this.slideScrollTimer != null)
        {
            this.slideScrollTimer.Start();
        }
    }
}

基本的に私が欲しいのは、誰かがアプリケーションに触れるたびにタイマーをリセットすることです。AddHandler を使用して PointerPressed/PointerReleased ハンドラーを追加しようとしましたが、フリップビューにいない場合、またはスクロールしたりコンテンツを操作したりする代わりにタップするだけでリリースされます。

4

1 に答える 1