Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过C语言寻找媒体游戏关系#_C#_Xaml_Uwp_Win Universal App - Fatal编程技术网

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
中。我已经更新了我的答案,请检查一下。