サイズ変更/移動なしで(システムメニューでも境界線でも)、すでに最大化されて開くWPFウィンドウを作成しようとしています。ユーザーが最小化する場合を除いて、常に最大化する必要があります。
WindowState = "Maximized"とResizeMode = "CanMinimize"を配置しようとしましたが、ウィンドウが開くと、タスクバーが覆われます(必要ありません)。
SC_MOVEとSC_SIZEをキャンセルするWndProcへのフックがあります。また、「コマンドが復元されて最小化された場合、復元、それ以外の場合、ブロックする」などのWndProcの条件を使用してこの制御を行うこともできます。
しかし、私のポイントは、それを実現する別の方法があるかどうかです。読んでくれてありがとう=)
ウィンドウのxamlにWindowState="Maximized" ResizeMode="NoResize"
を書き込む必要があります。
<Window x:Class="Miscellaneous.EditForm"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
Title="Edit Form" WindowState="Maximized" ResizeMode="NoResize"></Window>
public Window1()
{
InitializeComponent();
this.SourceInitialized += Window1_SourceInitialized;
}
private void Window1_SourceInitialized(object sender, EventArgs e)
{
WindowInteropHelper helper = new WindowInteropHelper(this);
HwndSource source = HwndSource.FromHwnd(helper.Handle);
source.AddHook(WndProc);
}
const int WM_SYSCOMMAND = 0x0112;
const int SC_MOVE = 0xF010;
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
switch (msg)
{
case WM_SYSCOMMAND:
int command = wParam.ToInt32() & 0xfff0;
if (command == SC_MOVE)
{
handled = true;
}
break;
default:
break;
}
return IntPtr.Zero;
}
WindowState="Maximized"
ResizeMode="NoResize"
WindowStyle="None"
WindowStyle = "None"はあなたが望むことをします、しかし...あなたはウィンドウタイトルを失い、ボタンを閉じ、そして他の問題を抱えています。
Tergiverが指摘したように、これは純粋にWPFの方法では不可能です。 P/Invokeを使用する必要があります。ウィンドウが開いたときにタスクバーが覆われる理由については、SC_MOVEとSC_SIZEをキャンセルして、必要な呼び出しを台無しにしていると思います。たぶん、ウィンドウがロードされた後、それらの呼び出しをキャンセルする必要があります。