我目前有一个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));
}
}
答案 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;
}
}
}