3

Windows 7 タブレット PC で Silverlight 4 out of browser (OOB) アプリケーションに取り組んでいます。ほとんどの場合、プログラムは全画面モードになっています。ただし、ユーザーがタブレットを回転させると、アプリケーションは回転して全画面表示のままになりますが、前の画面の向きに合わせてスケーリングされます。アプリケーションを全画面表示から取り出して全画面表示に戻すと、すべてが正しく再スケーリングされます。画面が回転したことを検出する方法はありますか? これまでのところ、アプリの Resize、LayoutChanged、FullScreenChanged イベントを試し、メイン ページの SizeChanged イベントのハンドラーを用意しました。アプリケーションが全画面表示モードで回転している場合、これらのいずれも発生しません。

Josh Einstein の提案に従って、アプリケーションの ActualWidth/Height をタイマーでポーリングしてみました。回転後、Silverlight プラグインから返される ActualWidth/Height 値は回転前の値のようです。プラグインの解像度を変更するには、全画面表示を解除して全画面表示に戻すだけです。私は OOB であるため、HtmlPage.Eval ハックは機能しませんでした。

Silverlight の WP7 バージョンには OnOrientationChanged イベントがあり、デスクトップ バージョンでは利用できないようです。誰にもアイデアはありますか?

4

1 に答える 1

1

素晴らしい質問ですが、私が知る限り、それは不可能のようです。仮想マシンで画面解像度を変更しようとしました (方向の変更は実際には、幅が高さよりも大きくなる、またはその逆になる画面解像度の変更にすぎません) が、レイアウト イベントをトリガーできませんでした。

問題は、Silverlight プラグイン自体のサイズが変更されていないことです。昇格したブラウザ外アプリケーションを使用すると、WMI との COM 相互運用を使用して実際の画面解像度を取得できると思われますが、これはハックのようなものです。ブラウザー内アプリケーションの場合は、HTML DOM を使用できます。どちらの場合も、イベント経由で通知を受けるのではなく、おそらく現在の画面解像度をポーリングする必要があります。

Mister Goodcatは、両方のシナリオでこの情報を取得する方法についてブログ投稿を書いています。

これも Silverlight のバグとして報告します。

于 2011-05-26T13:37:43.247 に答える