我目前有一个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));
}
}
何不你用旗子吗?例如在'onClick'中设置'flag = true',然后'if(flag == true)flag = false;返回;'在'PointerReleased' –
它总是最简单的解决方案...似乎我有一个脑袋试图提出一个更复杂的解决方案。 – user8296390