/ / Come? Finestra WPF: ingrandita, nessun ridimensionamento / spostamento: wpf, finestra, ridimensionamento della finestra, finestra massima

Come? Finestra WPF - Massimizzata, senza ridimensionamento / spostamento - wpf, finestra, ridimensionamento finestra, massimizza finestra

Sto cercando di creare una finestra WPF che si apra già ingrandita, senza ridimensionamento / spostamento (nel menu di sistema, né nel bordo). Dovrebbe essere ingrandita in ogni momento, tranne quando l'utente la minimizza.

Ho provato a mettere WindowState = "Maximized" e ResizeMode = "CanMinimize", ma quando si apre la finestra, copre la barra delle attività (non lo voglio).

Ho un gancio per WndProc che annulla SC_MOVE e SC_SIZE. Posso anche fare questo controllo con condizioni in WndProc come "se il comando è ripristinato ed è minimizzato, ripristina, altro, blocca" e così via.

Ma il mio punto è se abbiamo un altro modo per farlo. Grazie per leggere ragazzi =)

risposte:

13 per risposta № 1

È necessario scrivere WindowState="Maximized" ResizeMode="NoResize" in xaml della tua finestra:

<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 per risposta № 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 per risposta № 3

Come ha sottolineato Tergiver, questo non è possibile inun modo puramente WPF. Devi usare P / Invoke. Per quanto riguarda il motivo per cui la finestra copre la barra delle applicazioni quando si apre, penso che stai incasinando alcune chiamate richieste annullando SC_MOVE e SC_SIZE. Forse dovresti annullare quelle chiamate dopo che la finestra è stata caricata.


0 per risposta № 4
WindowState="Maximized"
ResizeMode="NoResize"
WindowStyle="None"

WindowStyle = "None" fa quello che vuoi, ma ... perdi il titolo della finestra, il pulsante di chiusura e hai altri problemi.

Visita WindowStyle = "Nessuno" alcuni problemi