single.php

C# WinUI3 のMediaPlayerElementをコンテキストメニューから操作する手順

C# WinUI 3アプリを作っていく途中で、調べたことを忘録的に投稿します。今回はWinUI3プロジェクトで、MediaPlayerElementに読み込んだ動画をコンテキストメニューから操作したい場合の対処法です。

コンテキストメニューを追加

[MediaPlayerElement]コントロールにコンテキストメニューを追加します。

<MediaPlayerElement Name="GridPlayer" Source="{Binding MediaPath}">
  <MediaPlayerElement.ContextFlyout>
    <MenuFlyout>
      <MenuFlyoutItem Text="再生" Name="PlayMenu">
        <MenuFlyoutItem.Icon>
          <FontIcon Glyph="&#xE768;" FontFamily="Segoe MDL2 Assets" />
        </MenuFlyoutItem.Icon>
      </MenuFlyoutItem>
      <MenuFlyoutItem Text="一時停止" Name="PauseMenu">
        <MenuFlyoutItem.Icon>
          <FontIcon Glyph="&#xE769;" FontFamily="Segoe MDL2 Assets" />
        </MenuFlyoutItem.Icon>
      </MenuFlyoutItem>
    </MenuFlyout>
  </MediaPlayerElement.ContextFlyout>
</MediaPlayerElement>

実行すると、動画ファイルを読み込んだ[MediaPlayerElement]をマウスで右クリックすると2つのコンテキストメニューが表示されます。

イベントプロシージャの追加

追加したコンテキストメニューにイベントを追加します。

<MediaPlayerElement Name="GridPlayer" Source="{Binding MediaPath}">
  <MediaPlayerElement.ContextFlyout>
    <MenuFlyout>
      <MenuFlyoutItem Text="再生" Name="PlayMenu" Click="PlayMenu_Click">
        <MenuFlyoutItem.Icon>
          <FontIcon Glyph="&#xE768;" FontFamily="Segoe MDL2 Assets" />
        </MenuFlyoutItem.Icon>
      </MenuFlyoutItem>
      <MenuFlyoutItem Text="一時停止" Name="PauseMenu" Click="PauseMenu_Click">
        <MenuFlyoutItem.Icon>
          <FontIcon Glyph="&#xE769;" FontFamily="Segoe MDL2 Assets" />
        </MenuFlyoutItem.Icon>
      </MenuFlyoutItem>
    </MenuFlyout>
  </MediaPlayerElement.ContextFlyout>
</MediaPlayerElement>

追加した、それぞれのイベントプロシージャにコードを追加してます。

[MediaPlayerElement]クラスには、動画の再生や一時停止を操作するメソッドが無いので、[MediaPlayerElement.MediaPlayer]プロパティでインスタンスを取得して、[Play]や[Pause]メソッドを利用します。

private void PlayMenu_Click(object sender, RoutedEventArgs e)
{
  MenuFlyoutItem currentitem = sender as MenuFlyoutItem;
  MediaPlayerElement mpe = currentitem.FindName("GridPlayer") as MediaPlayerElement;
  mpe.MediaPlayer.Play();
}

private void PauseMenu_Click(object sender, RoutedEventArgs e)
{
  MenuFlyoutItem currentitem = sender as MenuFlyoutItem;
  MediaPlayerElement mpe = currentitem.FindName("GridPlayer") as MediaPlayerElement;
  mpe.MediaPlayer.Pause();
}

実行して、それぞれのコンテキストメニューで読み込まれた動画の[再生]や[一時停止]をの操作が可能です。

まとめ

今回は短い記事ですが、Visual StudioのWinUI3プロジェクトで、MediaPlayerElementに読み込んだ動画をコンテキストメニューから操作したい場合の手順について紹介しました。

WinUI 3アプリで[MediaPlayerElement]で再生されている動画をコンテキストメニューから操作したい人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です