2

I am using a Media Element to play audio in a UWP project and have enabled TransportControls with Previous and Next buttons which don't work by default (nothing happens when pressed). How do I get a "Click" event on these buttons? I don't know how to tell the buttons to actually play the "Next" or "Previous" track.

ProgrammingLlama
  • 36,677
  • 7
  • 67
  • 86
leopard2lx
  • 21
  • 2

1 Answers1

1

How do I get a "Click" event on these buttons?

For your requirement, you could listen SystemMediaTransportControls ButtonPressed event, then you could get Next or Previous pressed. For more please refer Handle system media transport controls button presses document.

private async void MyMedia_Loaded(object sender, RoutedEventArgs e)
{  
    var control = MyMedia.MediaPlayer.SystemMediaTransportControls;
    control.ButtonPressed += Control_ButtonPressed;
}

async void Control_ButtonPressed(SystemMediaTransportControls sender,
    SystemMediaTransportControlsButtonPressedEventArgs args)
{
    switch (args.Button)
    {
        case SystemMediaTransportControlsButton.Play:
            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                mediaElement.Play();
            });
            break;
        case SystemMediaTransportControlsButton.Pause:
            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                mediaElement.Pause();
            });
            break;
        default:
            break;
    }
}

Please note the next and previous button only works when playing MediaPlaybackList. Because, it is internal event and it only fires after the actual MediaPlaybackItem is played. UWP does not provide straight button click event. If only want listen button click event. you could custom MediaTransportControls. Please refer this document.

public sealed class CustomMediaTransportControls : MediaTransportControls
{
    public CustomMediaTransportControls()
    {
        this.DefaultStyleKey = typeof(CustomMediaTransportControls);
    }

    protected override void OnApplyTemplate()
    {
        Button PreviousTrackButton = GetTemplateChild("PreviousTrackButton") as Button;
        PreviousTrackButton.Click += PreviousTrackButton_Click;


        base.OnApplyTemplate();
    }

    private void PreviousTrackButton_Click(object sender, RoutedEventArgs e)
    {

    }

}
Nico Zhu
  • 32,367
  • 2
  • 15
  • 36