You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI 3中如何捕获MediaTransportControl的播放按钮事件?

如何在MediaPlayerElement的播放按钮点击时执行自定义C#代码?

当然可以实现,不需要直接绑定传输控件的点击事件,而是通过监听MediaPlayer的CurrentStateChanged事件来捕捉播放状态变化,进而触发你的自定义逻辑。具体步骤如下:

  1. 给XAML中的MediaPlayerElement添加Loaded事件,确保控件初始化完成后再绑定媒体状态监听事件:
<MediaPlayerElement
    Visibility="Visible"
    x:Name="mp" 
    Source="C:/Users/Brian/Videos/happy.mp4"
    AutoPlay="False"
    AreTransportControlsEnabled="True"
    Stretch="UniformToFill"
    Loaded="MediaPlayerElement_Loaded"
>
</MediaPlayerElement>
  1. 在代码后台(比如MainPage.xaml.cs)实现事件处理逻辑:
private void MediaPlayerElement_Loaded(object sender, RoutedEventArgs e)
{
    // 绑定MediaPlayer的状态变化事件
    mp.MediaPlayer.CurrentStateChanged += MediaPlayer_CurrentStateChanged;
}

private void MediaPlayer_CurrentStateChanged(MediaPlayer sender, object args)
{
    // 当媒体状态切换为Playing时,执行自定义代码
    if (sender.PlaybackSession.PlaybackState == MediaPlaybackState.Playing)
    {
        // 这里替换成你需要运行的C#逻辑
        System.Diagnostics.Debug.WriteLine("播放按钮被点击,媒体开始播放");
        // 示例操作:更新UI提示、记录播放日志等
    }
}

补充说明

传输控件是封装好的组件,内部按钮并不对外暴露直接的点击事件,所以通过监听MediaPlayer的播放状态变化是最稳妥的方案。如果需要区分是用户点击播放按钮触发的播放,还是代码调用Play()或自动播放导致的状态变化,可以额外维护状态标记来做区分,不过大部分场景下监听Playing状态已经能满足需求。

内容的提问来源于stack exchange,提问作者user1094779

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 05:52:41