C# WinUI 3アプリを作っていく途中で、調べたことを忘録的に投稿します。今回はWinUI3プロジェクトで、MediaPlayerElementに読み込んだ動画をCommandBar(AppButton)から操作したい場合の対処法です。
AppBarButtonを追加
[MediaPlayerElement]コントロールを含むGridにCommandBarとAppBarButtonを追加します。
<GridView Name="Videos" HorizontalAlignment="Center" VerticalAlignment="Center">
<GridView.ItemTemplate>
<DataTemplate x:Name="Video_Data">
<Grid Name="Video_Grid" Width="360" Height="320">
<Grid.RowDefinitions>
<RowDefinition Height="160" />
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<MediaPlayerElement Name="GridPlayer">
</MediaPlayerElement>
<CommandBar VerticalAlignment="Bottom" HorizontalAlignment="Center">
<AppBarButton Name="AppButtonRewind" x:Uid="AppButtonRewind">
<AppBarButton.Icon>
<FontIcon Glyph=""/>
</AppBarButton.Icon>
</AppBarButton>
<AppBarButton Name="AppButtonPlay" x:Uid="AppButtonPlay">
<AppBarButton.Icon>
<FontIcon Glyph=""/>
</AppBarButton.Icon>
</AppBarButton>
<AppBarButton Name="AppButtonPause" x:Uid="AppButtonPause">
<AppBarButton.Icon>
<FontIcon Glyph=""/>
</AppBarButton.Icon>
</AppBarButton>
</CommandBar>
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
実行すると、動画ファイルを読み込んだ[MediaPlayerElement]に透過状態でボタンを含んだコマンドバーが表示されます。
コマンドバーの右端のオーバーフローボタン(表示しきれないボタンを表示するための[三連ドット]アイコン)をクリックすると透過状態のバーが非透過で表示されます。
[AppBarButton]に “Label” を追加するとボタンにテキストが追加されます。
<CommandBar VerticalAlignment="Bottom" HorizontalAlignment="Center">
<AppBarButton Name="AppButtonRewind" x:Uid="AppButtonRewind" Label="戻す">
<AppBarButton.Icon>
<FontIcon Glyph=""/>
</AppBarButton.Icon>
</AppBarButton>
<AppBarButton Name="AppButtonPlay" x:Uid="AppButtonPlay" Label="再生">
<AppBarButton.Icon>
<FontIcon Glyph=""/>
</AppBarButton.Icon>
</AppBarButton>
<AppBarButton Name="AppButtonPause" x:Uid="AppButtonPause" Label="停止">
<AppBarButton.Icon>
<FontIcon Glyph=""/>
</AppBarButton.Icon>
</AppBarButton>
</CommandBar>
実行すると、それなりにメディアプレイヤーのようなスタイルになってきました。
イベントプロシージャの追加
他のコントロールと同様にClickイベントを追加したします。
<CommandBar VerticalAlignment="Bottom" HorizontalAlignment="Center">
<AppBarButton Name="AppButtonRewind" x:Uid="AppButtonRewind" Label="戻す">
<AppBarButton.Icon>
<FontIcon Glyph=""/>
</AppBarButton.Icon>
</AppBarButton>
<AppBarButton Name="AppButtonPlay" x:Uid="AppButtonPlay" Label="再生" Click="AppButtonPlay_Click">
<AppBarButton.Icon>
<FontIcon Glyph=""/>
</AppBarButton.Icon>
</AppBarButton>
<AppBarButton Name="AppButtonPause" x:Uid="AppButtonPause" Label="停止">
<AppBarButton.Icon>
<FontIcon Glyph=""/>
</AppBarButton.Icon>
</AppBarButton>
</CommandBar>
追加されたイベントプロシージャにコードを追加します。
イベントプロシージャーの[sender]引数を利用して[MediaPlayerElement]クラスにアクセスが可能です。
private void AppButtonPlay_Click(object sender, RoutedEventArgs e)
{
AppBarButton currentitem = sender as AppBarButton;
VideoClass videos = (VideoClass)currentitem.DataContext;
MediaPlayerElement mpe = currentitem.FindName("GridPlayer") as MediaPlayerElement;
mpe.MediaPlayer.Play();
}
[MediaPlayerElement]クラスには、動画の再生や一時停止を操作するメソッドが無いので、[MediaPlayerElement.MediaPlayer]プロパティでインスタンスを取得して、[Play]や[Pause]メソッドを利用します。
実行して、[AppBarButton]の[再生]をクリックすると[MediaPlayerElement]に読み込まれた動画が[再生]されます。
まとめ
今回は短い記事ですが、Visual StudioのWinUI3プロジェクトで[CommandBar]に追加した[AppBarButton]から、MediaPlayerElementに読み込んだ動画をコンテキストメニューから操作したい場合の手順について紹介しました。
WinUI 3アプリで[MediaPlayerElement]で再生されている動画をコンテキストメニューから操作したい人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。