0

アプリ用のメディア プレーヤーをゼロから構築しています。「通常の」ビューから全画面表示にするには、プレーヤーを XAML の一部から削除し、別の部分に挿入します。次のようにします。

if (Trailer.IsFullScreen())
{
    // some code here

    var mediaPlayer = Trailer; // Trailer is the media player usercontrol
    TrailerFullScreenGrid.Children.Remove(Trailer);
    TrailerWrapper.Children.Add(mediaPlayer);

    // more code here
}
else
{
     // some code here

     var mediaPlayer = Trailer;
     TrailerWrapper.Children.Remove(Trailer);
     TrailerFullScreenGrid.Children.Add(mediaPlayer);

     // more code here
 }

これを行うと、ビデオの再生が続行されず、再生ボタンをクリックすると、クリップ全体が再開されます。私が望むのは、ムービーを一時停止し、すべての xaml マジックを実行してから、一時停止されたときから再生を継続することです。UnloadedBehaviour について何か読んだことがありますが、Windows 8 RTM ではその可能性はないようです。

どんな助けでも大歓迎です!

4

1 に答える 1

2

一部の視覚要素は、正しく機能するためにビジュアルツリーに残しておく必要があります。特に、メディアの再生またはキャプチャに関係する要素はそうです。私はあなたがしていることを試したことがありませんが、これがその振る舞いであることは私を驚かせません。

コントロールの親を変更して再生を再開した後、再生位置をキャプチャして設定してみることができると思いますが、これは大変な作業であり、エラーが発生しやすい可能性があります。正直なところ、Windows開発者がこの種のシナリオに対処することを意図した方法は、ビジュアルステートを使用することです。

Expression BlendでLayoutAwarePageを使用したことがある場合は、以前にVisualStateに遭遇したことがあるかもしれません。LayoutAwarePageには、Windows 8のさまざまな表示モード(塗りつぶし、スナップ、フルランドスケープ、フルポートレート)のすべての状態があります。ただし、 LayoutAwarePageを使用しない場合でも、いつでも独自の状態を作成できます。Blendの[状態]タブで状態を作成します(そのウィンドウが表示されない場合は、[ウィンドウ]-> [状態])。

すべての状態は、状態グループに存在する必要があります。グループ名は重要ではありませんが、グループ内のすべての状態が排他的であることを理解してください。したがって、グループMediaPlaybackStatesを呼び出し、そのグループ内にWindowedFullScreenという2つの状態を配置できます。

1つは、Blendを使用してそれらを設計できる2つの状態を定義したことです。状態を選択して、必要なプロパティを変更するだけです。次に、実行時にフレームワークにその状態に移行するように指示すると、「記録された」変更が再生され、それらをアニメーション化することもできます。

もちろん、1つの問題は、ビジュアル状態を使用してコントロールの親を変更できないことです。代わりに、プレーヤーの周囲のすべてのコントロールを、「フルスクリーン」モードに入るときに折りたたむことができるパネルにグループ化することを検討してください。グリッドコントロールを使用してすべてをレイアウトし、プレーヤーがいる/セルが「*」サイズに設定されていることを確認します。つまり、他のコントロールが折りたたまれている場合、使用可能なすべてのスペースを占有します。

ブログに詳細な記事があり、ビジュアル状態を使用してさまざまなWindows 8ウィンドウの状態(塗りつぶし、スナップなど)を処理する方法を示しています。その記事があなたを正しい方向に向けさせてくれることを願っています。

http://jaredbienz.wordpress.com/2012/04/22/wp-to-w8-view-states-using-visual-state-manager/

実行時に状態を変更する準備ができたら、

VisualStateManager.GoToState(this, "FullScreen", true);

最初のパラメーター(this)は、ウィンドウ全体の状態を変更することを意味します。2番目のパラメーターは、切り替えたい状態の名前であり、最後のパラメーターは、遷移(またはアニメーション)が状態に存在する場合にそれらを使用するかどうかです。

開発サポート、設計サポート、そして途中でのより素晴らしい良さ:http: //bit.ly/winappsupport

于 2013-02-26T18:24:45.903 に答える