如何访问由 MediaTransportControls 中的自定义按钮引发的事件?

How to get access to an event raised by a custom button in MediaTransportControls?

我有一个 UWP 桌面应用程序,它有一个带有自定义 MediaTransportControls 的 MediaPlayerElement。我在 MediaTransportControls 中创建了两个新按钮来增加和减少 MediaPlayerElement 的 PlaybackRate。我已经创建了在单击按钮时引发事件的过程,但我不知道如何在包含 MediaPlayerElement 的应用程序主页上访问这些事件。我怎么做?欢迎任何帮助。

XAML

<MediaPlayerElement x:Name="mediaPlayerElement" 
                                AutoPlay="False" 
                                HorizontalAlignment="Center" VerticalAlignment="Top"
                                Margin="0,0,0,100"
                                AreTransportControlsEnabled="True" >
                        <MediaPlayerElement.TransportControls>
                            <local:CustomMediaTransportControls x:Name="customMTC"
                                             IsSkipBackwardEnabled="False"
                                             IsSkipBackwardButtonVisible="False"
                                             IsSkipForwardEnabled="False"
                                             IsSkipForwardButtonVisible="False"
                                             IsFastForwardButtonVisible="True"
                                             IsFastForwardEnabled="True"
                                             IsFastRewindButtonVisible="True"
                                             IsFastRewindEnabled="True" 
                                            IsFullWindowButtonVisible="False"
                                            IsNextTrackButtonVisible="False"
                                            IsPreviousTrackButtonVisible="False"
                                            IsZoomButtonVisible="False"/>
                        </MediaPlayerElement.TransportControls>
                    </MediaPlayerElement>

<!--Custom Buttons-->
                                        <AppBarButton x:Name='CustomPlaybackRateDownButton'
                      Style='{StaticResource AppBarButtonStyle}'
                      MediaTransportControlsHelper.DropoutOrder='18' Visibility="Visible">
                                            <AppBarButton.Icon>
                                                <FontIcon FontFamily="Segoe MDL2 Assets" Glyph="&#xE70D;"/>
                                            </AppBarButton.Icon>
                                        </AppBarButton>

                                        <AppBarButton x:Name='CustomPlaybackRateUpButton'
                      Style='{StaticResource AppBarButtonStyle}'
                      MediaTransportControlsHelper.DropoutOrder='19' Visibility="Visible">
                                            <AppBarButton.Icon>
                                                <FontIcon FontFamily="Segoe MDL2 Assets" Glyph="&#xE70E;"/>
                                            </AppBarButton.Icon>
                                        </AppBarButton>

代码隐藏

public sealed class CustomMediaTransportControls : MediaTransportControls
{
    public event EventHandler<EventArgs> PlaybackRateDownClicked;
    public event EventHandler<EventArgs> PlaybackRateUpClicked;

    public CustomMediaTransportControls()
    {
        this.DefaultStyleKey = typeof(CustomMediaTransportControls);
    }


    protected override void OnApplyTemplate()
    {
        // Find the custom button and create an event handler for its Click event.
        var downButton = GetTemplateChild("CustomPlaybackRateDownButton") as Button;
        downButton.Click += CustomPlaybackRateDownButton_Click;

        var upButton = GetTemplateChild("CustomPlaybackRateUpButton") as Button;
        upButton.Click += CustomPlaybackRateUpButton_Click;

        base.OnApplyTemplate();
    }


    private void CustomPlaybackRateDownButton_Click(object sender, RoutedEventArgs e)
    {
        var OnPlaybackRateDownClick = PlaybackRateDownClicked;

        if (OnPlaybackRateDownClick != null)
        {
            OnPlaybackRateDownClick(this, EventArgs.Empty);
        }
    }

    private void CustomPlaybackRateUpButton_Click(object sender, RoutedEventArgs e)
    {
        var OnPlaybackRateUpClick = PlaybackRateUpClicked;

        if (OnPlaybackRateUpClick != null)
        {
            OnPlaybackRateUpClick(this, EventArgs.Empty);
        }
    }


}

您已将按钮点击事件重定向到 PlaybackRateDownClickedPlaybackRateUpClicked,因此您只需在主页中监听 CustomMediaTransportControls 的 PlaybackRate 点击事件。例如。

var smtc = new  CustomMediaTransportControls(); 
smtc.PlaybackRateDownClicked += Smtc_PlaybackRateDownClicked; 
private void Smtc_PlaybackRateDownClicked(object sender, EventArgs e) 
{   

}

更多细节请参考句柄和raise events document