C# 如何通过C语言寻找媒体游戏关系#
我正在为C# 如何通过C语言寻找媒体游戏关系#,c#,xaml,uwp,win-universal-app,C#,Xaml,Uwp,Win Universal App,我正在为MediaPlayerElement创建自定义MediaTransportControls。在其中,我添加了一个新按钮来创建一个当前正在播放视频的窗口。我已经用下面的代码完成了 //Button click event for CompactOverlayButton to Create a Frame in CompactOverlay mode public async void CompactOverlayButton_ClickAsync(object sender, Route
MediaPlayerElement
创建自定义MediaTransportControls。在其中,我添加了一个新按钮来创建一个当前正在播放视频的窗口。我已经用下面的代码完成了
//Button click event for CompactOverlayButton to Create a Frame in CompactOverlay mode
public async void CompactOverlayButton_ClickAsync(object sender, RoutedEventArgs e)
{
int compactViewId = ApplicationView.GetForCurrentView().Id; //Initializing compactViewId to the Current View ID
await CoreApplication.CreateNewView().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
var frame = new Frame();
compactViewId = ApplicationView.GetForCurrentView().Id;
frame.Navigate(typeof(VideoPlayerPage));
Window.Current.Content = frame;
Window.Current.Activate();
ApplicationView.GetForCurrentView().Title = "";
});
bool viewShown = await ApplicationViewSwitcher.TryShowAsViewModeAsync(compactViewId, ApplicationViewMode.CompactOverlay);
compactOverlayButton.Visibility = Visibility.Collapsed;
}
但一个问题是,我想从用户单击CompactOverlay按钮的位置恢复视频。我该怎么做?我认为解决您问题的一个可能方法是使用方法将当前播放位置传递给您的
VideoPlayerPage
,并在VideoPlayerPage
代码隐藏文件中,覆盖该方法以从当前播放位置恢复视频
例如,假设当前页面中有两个名为“MediaPlayerElement”的MediaPlayerElement
和VideoPlayerPage
。在当前页面中,我们可以将当前播放位置传递到传递当前播放位置
,如下所示:
//Get current playback position
var position = mediaPlayerElement.MediaPlayer.PlaybackSession.Position;
int compactViewId = 0;
await CoreApplication.CreateNewView().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
var frame = new Frame();
compactViewId = ApplicationView.GetForCurrentView().Id;
frame.Navigate(typeof(VideoPlayerPage), position);
Window.Current.Content = frame;
Window.Current.Activate();
ApplicationView.GetForCurrentView().Title = "";
});
bool viewShown = await ApplicationViewSwitcher.TryShowAsViewModeAsync(compactViewId, ApplicationViewMode.CompactOverlay);
protected override void OnNavigatedTo(NavigationEventArgs e)
{
/// set media source
...
/// set media source
if (e.Parameter is TimeSpan position)
{
mediaPlayerElement.MediaPlayer.PlaybackSession.Position = position;
}
mediaPlayerElement.MediaPlayer.Play();
}
但是,
CompactOverlyButton\u ClickAsync
是CustomMediaTransportControls
中的一个函数,它是从中派生的类。从这里我们无法获取mediaPlayerElement
。所以我们需要在这里做一些修改
在自定义传输控件中添加自定义命令按钮时,我们通常会使用公共EventHandler
来执行单击按钮时发生的操作。有关更多信息,请参阅中的
在这种情况下,我们可以添加一个EventHandler
,如下所示:
public event EventHandler<EventArgs> CompactOverlaid;
...
//Button click event for CompactOverlayButton to Create a Frame in CompactOverlay mode
public void CompactOverlayButton_Click(object sender, RoutedEventArgs e)
{
CompactOverlaid?.Invoke(this, EventArgs.Empty);
compactOverlayButton.Visibility = Visibility.Collapsed;
}
<local:CustomMediaTransportControls x:Name="CustomMediaControl" CompactOverlaid="CustomMediaControl_CompactOverlaid"/>
然后在VideoPlayerPage
code-behind文件中,按如下方式重写该方法:
//Get current playback position
var position = mediaPlayerElement.MediaPlayer.PlaybackSession.Position;
int compactViewId = 0;
await CoreApplication.CreateNewView().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
var frame = new Frame();
compactViewId = ApplicationView.GetForCurrentView().Id;
frame.Navigate(typeof(VideoPlayerPage), position);
Window.Current.Content = frame;
Window.Current.Activate();
ApplicationView.GetForCurrentView().Title = "";
});
bool viewShown = await ApplicationViewSwitcher.TryShowAsViewModeAsync(compactViewId, ApplicationViewMode.CompactOverlay);
protected override void OnNavigatedTo(NavigationEventArgs e)
{
/// set media source
...
/// set media source
if (e.Parameter is TimeSpan position)
{
mediaPlayerElement.MediaPlayer.PlaybackSession.Position = position;
}
mediaPlayerElement.MediaPlayer.Play();
}
在此之后,视频应该能够从用户单击
CompactOverlyButton
CompactOverlyButton\u ClickAsync
的位置播放,这是CustomMediaTransportControls
中的一个函数,它是MediaTransportControls
的派生类。它不是当前页面代码背后的函数。那么我该如何使用它呢?我希望您能理解。@VijayNirmal没有注意到您的CompactOverlayButton\u ClickAsync
在您的CustomMediaTransportControls
中。我已经更新了我的答案,请检查一下。