如果发生onClick事件,则阻止PointerReleased事件处理程序触发

时间:2017-08-30 12:54:57

标签: c# uwp

我目前有一个UWP应用程序显示视频列表,当用户点击它们时视频开始播放,如果用户触摸屏幕则结束。问题是它现在正在工作的方式PointerReleased(停止视频并隐藏播放器的可见性的事件)在onClick之后立即触发,因此视频永远不会显示。

此外,当应用程序空闲一段时间后,随机视频将开始播放,这可以在IsIdle变量上看到。

我已经尝试将按钮事件设置为PointerReleased但是它似乎没有做任何事情而且我无法使用PointerPressed来停止视频,因为它会与另一个事件发生冲突我有。

我的问题是,有没有办法阻止PointerReleased事件在那一刻正好发射?如果更改任何内容,这些方法位于不同的类中。

对于某些上下文,启动视频的方法是:

        private async void startVideo(StorageFile video)
        {
            playing = true; 
            App.Current.IsIdle = true;
            Windows.Storage.Streams.IRandomAccessStream stream;
            stream = await video.OpenAsync(Windows.Storage.FileAccessMode.Read);
            player.SetSource(stream, video.ContentType);
            //VideoFadeIn.Begin(); 
            player.Visibility = Visibility.Visible;
            //playerContainer.Visibility = Visibility.Visible; 
        }

当IsIdle通过此方法变为false时:

Window.Current.CoreWindow.PointerReleased += onCoreWindowPointerMoved;   

        private void onCoreWindowPointerMoved(CoreWindow sender, PointerEventArgs args)
        {
            idleTimer.Stop();
            idleTimer.Start();
            IsIdle = false;
        }

此方法称为:

public void onIsIdleChanged(Frame frame)
    {
        System.Diagnostics.Debug.WriteLine($"IsIdle: {App.Current.IsIdle}");
        if (App.Current.IsIdle == true)
        {
            player.Visibility = Visibility.Visible;
            //VideoFadeIn.Begin();
            if(!playing)
                playRandomVideo();
        }
        if (App.Current.IsIdle == false)
        {
            //VideoFadeIn.Stop();
            player.Visibility = Visibility.Collapsed;
            stopVideo();
            if (!playingSelected)
                frame.Navigate(typeof(Calculadoras));
        }
    }

1 个答案:

答案 0 :(得分:0)

正如Vijay在我原来的帖子评论中指出的那样,我可以简单地创建一个标志。因此对于未来类似场景中的任何人来说,我就是这样做的:

1-创建了在bool clickedSelected;初始化的标记false

2-点击视频后,将其更改为true

playingSelected = true;
clickedSelected = true;
startVideo(video);

3-在OnIsIdleChanged事件中,确保在跳过所有内容后将其更改回false:

public void onIsIdleChanged(Frame frame)
    {
        System.Diagnostics.Debug.WriteLine($"IsIdle: {App.Current.IsIdle}");
        if (App.Current.IsIdle == true)
        {
            //VideoFadeIn.Begin();
            if (!playing)
                playRandomVideo();
        }
        if (App.Current.IsIdle == false)
        {
            //VideoFadeIn.Stop();
            if (!clickedSelected)
            {
                stopVideo();
                if (!playingSelected)
                    frame.Navigate(typeof(Calculadoras));
                else
                    playingSelected = false;
            }
            else
            {
                App.Current.IsIdle = true;
                clickedSelected = false;
            }
        }
    }