既に出オチ…というか、これだけなのですが、Windows 8.1 から(というか、.NET Framework 4.5.1 からは)MediaElement に AreTransportControlsEnabled プロパティというのがあって、簡単に操作ボタンを出せます。あの「Play」とか「Stop」とかのボタンを自作しないで済むんですね。インジケータも出るので、AreTransportControlsEnabled=”True” と書いておけば一発です。
いつも忘れるのですが、Windows 8 のほうには無くて、
MediaElement プロパティ (System.Windows.Controls)
http://msdn.microsoft.com/ja-jp/library/system.windows.controls.mediaelement_properties(v=vs.110).aspx
Windows 8.1 のほうにはあるのです。
MediaElement.AreTransportControlsEnabled property – Windows app development
http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.mediaelement.aretransportcontrolsenabled
なので、普段 Developer Network で検索してもなかなか出てこなくて、うまくやると Dev Center のほうで検索されるという。いや、Dev Center のほうを使えばいいのですが、英語が主なので、何となく日本語版の Developer Network が google で検索されるというオチです。
普段は小さ目に貼り付けておいて、フル画面表示にすることもできます。
VS魂100連発ではスタート画面のピン留めから起動されたときには、自動的にフル画面になるようにしてあって MainPage クラスにこんな仕込みをしてあります。
public async void LoadState( string videoid ) { if (videoid != "") { this.media.IsFullWindow = true; var url = await YouTube.GetVideoUriAsync(videoid, YouTubeQuality.Quality1080P); this.media.AutoPlay = true; this.media.Source = url.Uri; this.media.Play(); } }
そして、app.xaml.cs の OnLaunched メソッドのときにページの状態をみて LoadState メソッドを呼び出します。100連発のアプリは一枚しかないので、Page を見る必要はないのですが念のため。
if (rootFrame.Content == null) { // ナビゲーションの履歴スタックが復元されていない場合、最初のページに移動します。 // このとき、必要な情報をナビゲーション パラメーターとして渡して、新しいページを // 作成します if (!rootFrame.Navigate(typeof(MainPage), e.Arguments)) { throw new Exception("Failed to create initial page"); } } else { // 既存のページにパラメータを渡す。 var page = rootFrame.Content as MainPage; if ( page != null ) { page.LoadState(e.Arguments); } } // 現在のウィンドウがアクティブであることを確認します Window.Current.Activate(); }
実は、プロトコルからアクセスしたときのために OnActivated イベントがあるのですが、これは Launch の時(スタート画面などから起動されたとき)は呼び出されないため、OnLaunched の中に書きます。それ以外のときは、args.Kind で呼び出された状態を識別して分岐させます。
ActivationKind enumeration – Windows app development
http://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.activation.activationkind(v=win.10).aspx
FileOpenPicker や ContactPicker を作ると、独自のピッカーが作れるという訳です…まだ作ったことはありませんが。