WPFはWindowsFormsに比べ、デザインを柔軟に設定できて良いですね。
また、デザインとロジックの分離がとてもやりやすいです。Visual Studio 2008のエディタがこなれていないのと、Bindingマークアップ拡張が分かりにくいのが普及を妨げている感がありますが(?)、おすすめです。
WPFでシステムメニューを表示する
さて、大した内容では無いのですが、WPFで任意のタイミングでシステムメニューを表示させる方法をご紹介します。
WPFでと言いながらWinAPIのお話で、かなり有名な内容ですが、まあ一応。
[DllImport("user32.dll")]
public static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
private void Button_Click(object sender, MouseButtonEventArgs e)
{
//マウス座標を取得し、lParamに加工
int x = System.Windows.Forms.Control.MousePosition.X;
int y = System.Windows.Forms.Control.MousePosition.Y;
IntPtr lParam = new IntPtr(x | y << 16);
//Windowハンドルを取得し、0x313メッセージを送信
IntPtr hwnd = new System.Windows.Interop.WindowInteropHelper(this).Handle;
PostMessage(hwnd, 0x313, IntPtr.Zero, lParam);
}
要するに0x313を送るだけです。これはWinUser.hにも書かれていない隠し定数ですが、いろんなところで紹介されて逆に有名な値です。0x313。