/ / Jak? Okno WPF - zmaksymalizowane, bez zmiany rozmiaru / przesunięcia - wpf, okno, rozmiar okna, okno maksymalizacji

Jak? Okno WPF - zmaksymalizowane, bez zmiany rozmiaru / przesunięcia - wpf, okno, rozmiar okna, okno maksymalizacji

Próbuję utworzyć okno WPF, które otwiera się już zmaksymalizowane, bez zmiany rozmiaru / ruchu (w menu systemowym, ani w ramce), powinno być maksymalizowane cały czas, z wyjątkiem sytuacji, gdy użytkownik zminimalizuje to.

Próbowałem umieścić WindowState = "Maximized" i ResizeMode = "CanMinimize", ale kiedy otworzy się okno, obejmuje pasek zadań (nie chcę tego).

Mam hak do WndProc, który anuluje SC_MOVE i SC_SIZE. Mogę również wykonać tę kontrolę z warunkami w WndProc, jak "jeśli polecenie jest przywracane i jest zminimalizowane, przywrócić, inaczej, zablokować" i tak dalej.

Ale moim celem jest, jeśli mamy inny sposób, aby to zrobić. Thankz for read guys =)

Odpowiedzi:

13 dla odpowiedzi nr 1

Konieczne jest pisanie WindowState="Maximized" ResizeMode="NoResize" w Xaml twojego okna:

<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>

2 dla odpowiedzi nr 2
    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;
}

1 dla odpowiedzi nr 3

Jak zauważył Tergiver, nie jest to możliwe wwyłącznie sposób WPF. Musisz użyć P / Invoke. Jeśli chodzi o to, dlaczego okno obejmuje pasek zadań po otwarciu, myślę, że zepsułeś niektóre wymagane połączenia, anulując SC_MOVE i SC_SIZE. Może powinieneś anulować te połączenia po załadowaniu okna.


0 dla odpowiedzi nr 4
WindowState="Maximized"
ResizeMode="NoResize"
WindowStyle="None"

WindowStyle = "None" rób to, co chcesz, ale ... tracisz tytuł okna, przycisk zamykania i masz inne problemy.

Odwiedzić WindowStyle = "None" niektóre problemy