2017-08-30 58 views
-1

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

此外,随机视频将在应用程序闲置一段时间后开始播放,这可以在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)); 
     } 
    } 
+0

何不你用旗子吗?例如在'onClick'中设置'flag = true',然后'if(flag == true)flag = false;返回;'在'PointerReleased' –

+0

它总是最简单的解决方案...似乎我有一个脑袋试图提出一个更复杂的解决方案。 – user8296390

回答

0

正如Vijay在我原来发表的评论中指出的,我可以简单地创建一个标志。因此,对于将来在类似情况下的任何人,以下是我如何做到的:

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

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; 
      } 
     } 
    } 
+0

我以为我可以发布这个答案,但它确定 –

相关问题