最大化すると(タスクバーも表示されない)全体の領域を占めるWindows MediaPlayerまたはブラウザーベースのFlashプレーヤーと同じ効果を実現したいと思います。
これは、XAMLでWindowState
がMaximized
に設定され、WindowStyle
がNone
に設定されている場合に正常に機能するため、アプリはその状態で起動されます。問題は、境界線のあるウィンドウでアプリを起動したいのですが、ユーザーが選択したら、上記のように最大化します。 StateChanged
ハンドラーでMaximized
状態を確認し、その場合はWindowStyle
をNone
に設定します。これには、ウィンドウを最大化する効果がありますが、タスクバーはカバーされません。次のコードは私が望むようにこれを機能させますが、それはハックであり、私はそれをクリーンアップしたいと思います:
if (WindowState == WindowState.Maximized)
{
m_videoWindow.Maximize();
WindowStyle = WindowStyle.None;
//the following makes this work but I would like to clean it up
Hide();
Show();
}
[〜#〜] edit [〜#〜]This (2006年からまだCTPにいるとき)は問題と誰かに言及していますMSによると、次のバージョンでフルスクリーンのサポートを改善したいと考えていますが、これらの改善は行われていますか?
この記事ではすべてを説明します: タスクバーを考慮してウィンドウを最大化(WindowStyle = None) 。
また、チェックする価値があります: カスタムウィンドウChrome in WPF 。
Edit:新しいのは、ウィンドウの完全なスタイル変更を可能にするWPFシェル統合ライブラリですchrome移動の再実装、サイズ変更など。
2015年の編集:シェル統合ライブラリがWPFに統合され、MSがコードを廃止しました
ウィンドウの作成時にプロパティを設定することで(タスクバーをカバーして)フルスクリーンに最大化できることがわかりました(xamlで)が、作成後に前後に切り替えることができませんでした。いくつかの実験の結果、プロパティが設定される順序が重要であることがわかりました。
public bool IsFullscreen
{
get
{
return WindowState == System.Windows.WindowState.Maximized
&& ResizeMode == System.Windows.ResizeMode.NoResize
&& WindowStyle== System.Windows.WindowStyle.None;
}
set
{
if ( value )
{
ResizeMode = System.Windows.ResizeMode.NoResize;
WindowStyle = System.Windows.WindowStyle.None;
WindowState = System.Windows.WindowState.Maximized;
}
else
{
ResizeMode = System.Windows.ResizeMode.CanResize;
WindowStyle = System.Windows.WindowStyle.SingleBorderWindow;
WindowState = System.Windows.WindowState.Normal;
}
}
}
セッターではWindowStateが最後に来るであることに注意してください。
これをWPF/.NET 4.0アプリケーションで正しく機能させるために、フルスクリーンモードを開始または終了するたびにこの関数を呼び出しています。
private static void RefreshWindowVisibility(Window window)
{
if (window.OriginalWindowState == WindowState.Maximized)
{
window.Hide();
window.Show();
window.BringIntoView();
}
}
この方法にはちらつきがありますが、Chromeで全画面モードに移行したときに同じちらつきが存在するようです。 InternetExplorerは別のアプローチを取っているようです。
これで問題ないかどうかはわかりませんが、ウィンドウのサイズを変更して、作業領域(つまり、ほとんどの場合、タスクバーを除くすべての画面)と同じサイズにし、0,0(左上隅):
Width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width;
Height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height;
Left = 0;
Top = 0;
(MSDNからの)WorkingAreaプロパティの正確な定義は次のとおりです。
ディスプレイの作業領域を取得します。作業領域は、タスクバー、ドッキングされたウィンドウ、およびドッキングされたツールバーを除く、ディスプレイのデスクトップ領域です。
それが役に立てば幸い