[WinRT] MediaElement の操作メニューは AreTransportControlsEnabled で出す

既に出オチ…というか、これだけなのですが、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 で検索されるというオチです。

普段は小さ目に貼り付けておいて、フル画面表示にすることもできます。

20141009_05

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 を作ると、独自のピッカーが作れるという訳です…まだ作ったことはありませんが。

カテゴリー: C#, WinRT パーマリンク