2017-08-30 96 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

我以爲我可以發佈這個答案,但它確定 –

相關問題